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

STM32F412 串口波特率最大调到3.1M就上不去了

[复制链接]
晓权 提问时间:2021-8-4 15:32 / 已解决
       之前,用STM32F407的芯片做了串口usart6通讯,波特率调整到3.9M可以正常通讯,发送的数据也都对。现在换STM32F412后发现最大频率的串口波特率只能到3.1M。再上去发出的数据频率就降低到几十KHZ。
       后来调试,发现在串口初始化函数里usrat6用到这条if语句,PCLK2的时钟只有50M导致最后USARTx->BRR里的值不对。对照STM32f407,发现我是在主频168M的条件下,导致这里PCLK2的时钟有84M算的结果可以满足3.9M的波特率。
问题一、我试着设置过RCC_PCLK2Config(RCC_HCLK_Div1);但是不起作用,也曾修改过apbclock = RCC_ClocksStatus.HCLK_Frequency;但是结果还是不对,我想问问格纹技术员大大,这个怎么处理啊,手册上说过可以达到12.5M 的速度呢。怎么可以实现呢?


收藏 评论2 发布时间:2021-8-4 15:32

举报

2个回答
xmshao 最优答案 回答时间:2021-8-4 17:29:11
我刚才找了个块STM32F412的开发板对UART6进行了测试,结果符合数据手册里标定的数据。



当过采样选择8时,波特率达到12.5MBPS,当过采样选择16时,波特率达到6.25MBPS是没有问题的,APB2的时钟配置为100MHz.



  huart6.Instance = USART6;

  huart6.Init.BaudRate = 6250000;

  huart6.Init.WordLength = UART_WORDLENGTH_8B;

  huart6.Init.StopBits = UART_STOPBITS_1;

  huart6.Init.Parity = UART_PARITY_NONE;

  huart6.Init.Mode = UART_MODE_TX_RX;

  huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;

  huart6.Init.OverSampling = UART_OVERSAMPLING_16;

  if (HAL_UART_Init(&huart6) != HAL_OK)

  {

    Error_Handler();

  }



你可以使用CubeMx进行配置,然后添加自己的应用代码,这样比较方便而简单。你的问题可能出在时钟配置这块。
晓权 回答时间:2021-8-4 15:33:41
屏幕截图 2021-08-04 153243.png
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版