首先,我用的是STM32F407,下方所有图片都是出自这芯片的文档,如果型号和我不同,需要找到对应的芯片说明文档,也许会有出入 先看一张时钟图 这里会着重说明高速的部分,低速(不管内部还是外部)只给RTC时钟使用 题外话,MCO1.MCO2,你可以往外面输出时钟 以下开始正题 图片红圈处是主时钟,供给许多东西使用,例如外设(UART.SPI...),简直就像大型音乐演奏的指挥者 所有你想用到的外设,初始化第一步,就是使能时钟(向主时钟请求) 例如下方的SPI初始化代码 void SPI3_Ini…
void RCC_Configuration(void){  /* RCC system reset(for debug purpose) */  RCC_DeInit(); /* Enable HSE */  RCC_HSEConfig(RCC_HSE_ON); /* Wait till HSE is ready */  HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS)  {         …
STM32的RTC晶振经常出现不起振的问题,这已经是“业界共识”了.很多人在各种电子论坛上求助类似于“求高手指点!RTC晶振不起振怎么办”的问题,而其答案基本可以概括为“这次高手帮不了你了” 更有阴谋论者提出让人啼笑皆非的解释——STM32的RTC晶振不起振是ST与晶振厂商串通后故意搞出来的,目的是提高某晶振厂商高端晶振的销量. 最近做的几块板子也用到了STM32的RTC,前后两版一共做了大概6片,幸运的是并未遇到晶振不起振的现象.而我采用的是3毛钱一个的普通晶振,并未选用传说中低负载高精度晶振…
今天(2014.4.21)把stm32f107的程序下载到stm32f103的板子上,发现串口收不到数据,突然想起晶振频率没有修改,#define HSE_VALUE    ((uint32_t)13560000) /*!< Value of the External oscillator in Hz */ 这个要改回去,因为外接晶振是8M 之后试验,发现有数据,但是乱码.百思不得其解,无意中发现,PC的波特率设置为9600,板子的波特率设置为19200就不会乱码.刚好是2倍的关系.顺藤摸瓜问度…
一般来说,stm32f107都是用标配的晶振,比如8MHz. 但是,如果用别的晶振,比如13.56M的晶振,那串口接收还正常吗? 根据试验结果,很可能会飞码.比如说用串口助手发送的是0x35,但是在串口接收中断里面就会得到别的值,即上位机发送的数据和板子接收的数据不一致. 通过查资料,解决办法如下: 修改文件stm32f10x.h, 把 #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator i…
前言 最近在试用uFUN开发板,下载配套的Demo程序,串口数据输出正常,当使用另一个模板工程,调用串口printf调试功能时,输出的却是乱码,最后发现是外部晶振频率不一样.很多STM32开发板都是使用的8M晶振,这个也是ST官方推荐的晶振频率,而且固件库默认是8M频率,倍频系数9.而uFUN开发板的晶振是和CH340共用一个12M晶振.如果固件库的参数不和硬件实际连接的晶振频率一致,那么不仅是串口会出现乱码,而且定时器这些也是不准确的,因为基本的工作时钟被打乱了.其实之前也遇到过这个问题,这次…
版权声明:本文为博主原创文章. 前几天在中移物联网申请了一个迷你开发板,运行官方提供的程序,感觉板子是正常的.但是自己写的程序能够刷到板子上,但是串口却是乱码.官方和我的额程序都是用的库函数的方式写的.在网上,有人说库函数默认是8兆晶振,但是“option for target”->"target"里将Xtal(MHz)设置为12,也不起作用.   对比发现,官方的库函数,都是在程序文件里的,mdk应该是4.X版的.我用的mdk5.X版的,后来在官网下载了5.21a的版本依然是同…
由于STM32F10x库官方采用的是默认的外接8MHz晶振,因此造成很多用户也采用了8MHz的晶振,但是,8MHz的晶振不是必须的,其他频点的晶振也是可行的,只需要在库中做相应的修改就行.    在论坛上看到很多用户反映,使用外接12MHz的晶振,会造成很多的问题,如USART的波特率不正确,Systick走时不准等问题,在无论是在实际调试还是在软件模拟中都会发现这个情况,其实,这不能怪ST官方,我们必须肯定ST官方为方便用户开发所做的努力,下面我们就通过简单的三个步骤就可以让你随意的使用4—1…
1. STM32f103有内部晶振.刚刚上电时,所有Clock都是源于内部晶振,所以当片内没有程序或内部程序没有使能外部晶振时,外部晶振是不会起振的.2. STM32f103有内部复位电路,只有当检测到外部电压大于电压阀值时才会启动.因为需要检测外部电压,所以模拟Ref/VDDA/VSSA不能开路,做实验是可以将Ref/VDDA与3.3V链接,VSSA与GND链接.3. 串口连接时,要记得正确配置好Boot0和Boot1引脚的电平.4. Jlink链接时,要注意是JTAG模式还是SWD模式.(一…
如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空.2)对于少于100脚的产品,有2种接法:  2.1)OSC_IN和OSC_OUT分别通过10K电阻接地.此方法可提高EMC性能.  2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'.此方法可以减小功耗并(相对上面2.1)节省2个外部电阻. 以下是在ST英文网站FAQ上抄下的详细解释: 1) In 100…