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

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 手机版