首页 健康运动正文

不同晶振配置STM32 波特率

  一般来说,stm32都是用标配的晶振,比如8MHz. 但是,如果用别的晶振,比如13.56M的晶振,那串口接收还正常吗?

  根据试验结果,很可能会飞码。比如说用串口助手发送的是0x35,但是在串口接收中断里面就会得到别的值,即上位机发送的数据和板子接收的数据不一致。

  通过查资料,解决办法如下:

  修改文件stm32f10x.h,

  把

  #define HSE_VALUE ((uint32_t)8000000)

  修改为:

  #define HSE_VALUE ((uint32_t)13560000)

  这样,就正常了。

  另外,有的网友说还需要修改一个文件:system_stm32f10x.c,修改PLL参数:

  将

  RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |

  RCC_CFGR_PLLMULL));

  RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);

  修改为:

  RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |

  RCC_CFGR_PLLMULL));

  RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL4);

  (因为我的SYSCLK是54.24M)

  再摘抄某网友的一段话,帮助理解:

  如果你仔细研究USART_Init()函数,你会发现,这个程序在配置波特率时会读取RCC有关的寄存器来计算当前CPU实际的工作频率是多少,然后计算参数来实现你需要的波特率——就是说不管你把单片机设置为什么样的工作频率,这个函数都能让串口以你要求的波特率工作。

  当然如果你把原来8M的晶振换掉了,那你就需要修改系统中的一个定义:在文件stm32f10x.h中的定义HSE_Value,这参数定义了单片机使用外部晶振或时钟源的频率,一般就是8000000,即使用8MHz晶振。如果你的STM32用了什么7.3728、11.0592或者25MHz晶振时,你就要修改HSE_Value定义的值,这样保证串口通信波特率正确。

  凯越翔晶振官网 http://www.kyx9999.com

  凯越翔晶振商城 http://www.kyxcrystal.com

  • 随机文章

  • 热门文章

  • 热评文章

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接:http://www.net361.net/jkyd/25874.html

发表评论

评论列表(0人评论 , 17人围观)
☹还没有评论,来说两句吧...