你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F407VG使用固件库进行串行通讯波特率出错故障的排除

[复制链接]
wenyangzeng 发布时间:2017-12-2 21:49
本帖最后由 wenyangzeng 于 2017-12-2 22:00 编辑

STM32F407VG使用固件库进行串行通讯波特率出错故障的排除

    芯片型号:  STM32F407VG,与上位机串口通讯交换数据:
    系统时钟:外部晶振8MHZ,倍频到168MHZ;
    固件库:stm32f4xx_DSP_StdPeriph_Lib_V1.8.0;
    在MDK5中运行stm32f4xx_DSP_StdPeriph_Lib_V1.8.0串口通讯,结果发现串口发送和接收数据都是乱码;

故障分析:
打开system.stm32f4xx.c关于时钟配置的说明:
  1.     *                    Supported STM32F40xxx/41xxx devices
  2.   *-----------------------------------------------------------------------------
  3.   *        System Clock source                    | PLL (HSE)
  4.   *-----------------------------------------------------------------------------
  5.   *        SYSCLK(Hz)                          | 168000000
  6.   *-----------------------------------------------------------------------------
  7.   *        HCLK(Hz)                           | 168000000
  8.   *-----------------------------------------------------------------------------
  9.   *        AHB Prescaler                        | 1
  10.   *-----------------------------------------------------------------------------
  11.   *        APB1 Prescaler                        | 4
  12.   *-----------------------------------------------------------------------------
  13.   *        APB2 Prescaler                        | 2
  14.   *-----------------------------------------------------------------------------
  15.   *        HSE Frequency(Hz)                       | 25000000
  16.   *-----------------------------------------------------------------------------
  17.   *        PLL_M                              | 25
  18.   *-----------------------------------------------------------------------------
  19.   *        PLL_N                              | 336
  20.   *-----------------------------------------------------------------------------
  21.   *        PLL_P                              | 2
  22.   *-----------------------------------------------------------------------------
  23.   *        PLL_Q                              | 7
  24.   *-----------------------------------------------------------------------------
复制代码
从说明中可知stm32f4xx_DSP_StdPeriph_Lib_V1.8.0演示代码中对于STM32F40xxx/41xxx系列芯片系统时钟的默认配置如下:

HSE Frequency(Hz)  :   使用外部25MHZ晶振;
System Clock source:  PLL (HSE),
SYSCLK                    :  168MHZ.
PLL_M                     :25
PLL_N                     :336
PLL_P                     :2
PLL_Q                    :7
      由于实际使用的晶振为8MHZ,按照默认的时钟配置当然无法得到正确的波特率,从而导致串口通讯失败。
解决方法:
借助STM32CubeMX,可以方便地配置系统时钟:

无标题1.png

根据上图配置系统时钟所需正确参数:
M=4     ( PLL_M)
N=168  (PLL_N)
P=2      (PLL_P)
Q=4      (PLL_Q)

接下来修改相关文件:
1、在stm32f4xx.h的70行定义芯片型号:

  1. #define STM32F40_41xxx
复制代码



2、在stm32f4xx.h的144行定义晶振频率
  1. #define HSE_VALUE    ((uint32_t)8000000)
复制代码



3、在system_stm32f4xx.c中修改
371行
  1. #define PLL_M     4
复制代码


384行
  1. #define PLL_Q      4
复制代码


401行
  1. #define PLL_N     168
复制代码


       经过以上修改,编译运行,串口通讯工作正常。
总结:在使用ST传统固件库开发产品过程中,当目标板使用与ST固件库默认值不同的外部晶振时,不能一味拿来就用。应该认真阅读ST官方关于固件库的说明,及时修改相关参数,才能避免多走弯路。


评分

参与人数 1 ST金币 +6 收起 理由
MrJiu + 6 很给力!

查看全部评分

收藏 1 评论4 发布时间:2017-12-2 21:49

举报

4个回答
MrJiu 回答时间:2017-12-4 09:14:00
不错!!!
zero99 回答时间:2017-12-4 09:19:57
谢谢大佬分享啦
wenyangzeng 回答时间:2017-12-4 10:40:14
tianqi911 回答时间:2021-12-15 10:32:39

MARK 谢谢 小白学习了。但自己的回复怎么下次找不到呢?

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版