0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于USART波特率 TIM的外设预分频值

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-06 14:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

使用、参考STM32标准外设库,寄存器开发的朋友也需要注意一些细节问题。

1USART串口预分频

许多朋友用寄存器开发,就需要对寄存器中每一位十分熟悉才行。

但是在STM32中外设的寄存器很多,不像51这类单片机,就那么为数不多的寄存器,而且寄存器也能很容易理解。

有朋友其实已经发现,UART波特率设置太高,或太低就不能实现了。看下图波特率计算公式:

从上图可以看得出,波特率与fCK和USARTDIV。其中USARTDIV是一个无符号的定点数,这12位的值设置在USART_BRR寄存器。

结合上面图文,大家应该可以知道,波特率也是有一个范围的,而且波特率是存在误差的。

举一个例子:fCK = 36M,波特率 = 100,那么计算出USARTDIV = 36M / 1600 =22500.

然而,12位的数最大为4095,所以,越界了。

写这些其实希望不管你使用寄存器,还是库开发,其实都需要了解这些,避免入坑。

2

TIM定时器预分频

前面有朋友问了我关于TIM定时器的问题,说自己参考STM32标准外设库,配置定时器,但是定时却不准确。

经过交谈,他把配置代码截图给我看了。我一看,就看出问题出在预分频值上。

而这位朋友是使用STM32F407,主频168M,他想让定时器每秒计数1000个,就是上面“SystemCoreClock / 1000”。

然而,他却没有考虑溢出问题:168M / 1000 = 168K,PrescalerValue最大值为65535.

另一个关于APB1、APB2时钟问题

有朋友发现自己配置的定时会相差一倍,其实原因也是在于预分频值不对造成的。

让大家看一下下图两个预分频宏定义:

原因在于:有的TIM定时器时钟是APB1,有的是APB2。这两个时钟一般默认配置是相差一倍,所以定时也就会相差一倍。

关于TIM使用的APB时钟差异,大家可以通过查看“参考手册”RCC章节,或结合STM32Cube工具理解。

定时器RCC时钟:

定时器Cbue时钟配置:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2312

    文章

    11189

    浏览量

    374514
  • 定时器
    +关注

    关注

    23

    文章

    3372

    浏览量

    124445
  • Tim
    Tim
    +关注

    关注

    0

    文章

    85

    浏览量

    19116
  • USART
    +关注

    关注

    1

    文章

    202

    浏览量

    33311
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    求助,关于SPI S32K344波特率问题求解

    我正在尝试将SPI波特率上限设置为20mHz。正如S32K3xxSPI用户指南中所述,明确提到LPSPIO波特率可调整至20mHz。然而,在周边库中我无法将其更改超过15000000。请附上相关截图以作说明。 请告诉我如何使之成为可能。或者让我知道局限性。
    发表于 03-26 06:50

    智能显示模块支持哪些波特率?智能显示模块怎么设置波特率

    智能显示模块支持哪些波特率?智能显示模块怎么设置波特率
    发表于 03-17 11:26

    硕博电子IO模块修改波特率和节点ID操作步骤

    正确设置波特率与节点ID,是保证IO模块与控制器稳定通信的关键。配置不当易引发设备失联、数据错乱等故障。本文将详细讲解波特率与节点ID的规范修改步骤,轻松搞定配置难题。
    的头像 发表于 01-27 10:39 693次阅读
    硕博电子IO模块修改<b class='flag-5'>波特率</b>和节点ID操作步骤

    请问使用串口ISP波特率可以自己设定吗?

    请问使用串口ISP,波特率可以自己设定吗?
    发表于 01-14 08:27

    FDCAN 数据段波特率增加后发送失败的问题分析

    客户在使用 FDCAN 协议,仲裁段波特率配置位 1Mbit/s,数据段波特率配置为 5Mbit/s时,发现 FDCAN 发送功能异常。首先建议客户使用 IC 内部回环模式进行测试发现 5M
    发表于 01-04 11:16 0次下载

    请问波特率参数如何设置?

    波特率参数如何设置?
    发表于 12-24 08:05

    支持小数波特率的意义是什么

    我看芯源有一款MCU是支持小数波特率,支持小数波特率的意义是什么?是为了数据传输更稳定?
    发表于 12-11 07:15

    UART波特率计算及UART收发回显实验

    Register)。波特率与寄存器的的公式如图19_8 所示。N表示BRR寄存器的,B是波特率,PCLK 是外设时钟的频率(单位:MH
    的头像 发表于 10-17 09:51 3323次阅读
    UART<b class='flag-5'>波特率</b>计算及UART收发回显实验

    115200的波特率,为啥实际速度只有11KB/s?

    波特率≠真实速度! 这几个概念确实容易混淆,但它们描述的是通信过程中不同层面的速率指标。让我们一起来理清楚它们的区别和联系↓ 主要区别解析 比特 (Bit Rate): 指每秒传输的二进制比特数量
    的头像 发表于 09-10 11:18 960次阅读

    请问如何使用低功耗 UART (LP UART) 波特率补偿?

    如何使用低功耗 UART (LP UART) 波特率补偿?
    发表于 08-21 07:05

    波特率是什么

    波特率是串行通信中的一个核心参数,用于描述数据在传输线路上的传输速率。以下从定义、单位、与比特的关系、实际应用及设置注意事项等方面进行详细说明: 一、定义与本质 波特率(Baud Rate)指单位
    的头像 发表于 07-22 11:11 9486次阅读

    可编程电源的通信波特率应如何设置?

    支持9600-115200bps,Chroma 62000P系列支持1200-230400bps)。 标准波特率:优先选择通用标准(如9600、19200、38400、115200bps),避免使用非标波特率
    发表于 07-07 15:01

    基于瑞萨64位MPU RZ/G2L的uboot串口多波特率支持介绍

    本文主要介绍基于瑞萨64位MPU RZ/G2L,讨论uboot下非常规波特率115200的支持方法,用于解决客户对uboot下特殊波特率的需求,供客户参考。
    的头像 发表于 07-04 15:54 3218次阅读
    基于瑞萨64位MPU RZ/G2L的uboot串口多<b class='flag-5'>波特率</b>支持介绍

    第二十章 TIM——基本定时器

    本章介绍了W55H32基本定时器TIM6、TIM7,16位向上计数,含时钟源、预分频器等,讲解定时计算及初始化结构体。
    的头像 发表于 06-20 13:51 1316次阅读
    第二十章 <b class='flag-5'>TIM</b>——基本定时器

    第十四章 USART——串口通讯

    本章介绍了USART串口通讯,含物理层(RS-232、TTL电平)、协议层(波特率、数据帧),及W55MH32的USART功能与应用。
    的头像 发表于 06-14 16:30 2008次阅读
    第十四章 <b class='flag-5'>USART</b>——串口通讯