打印
[AT32F421]

库函数里USART波特率分频的计算感觉过于复杂

[复制链接]
1146|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 cooldiy_cn 于 2023-9-2 20:28 编辑

为啥要区分整数和小数部分,本来就是16倍,直接除不就行了吗?难道是为了四舍五入吗?
按例2:算了半天的结果,USART_BAUDR=0x19A=(10进制)410,直接算25.62*16=409.92(四舍五入就是410)。
例3同理啊
然后对照以下表格,直接找个不整的有误差的试算以以下结果:取36M下230.4K 波特率,直接用36000K/230.4K=156.25取156 表里的USART_DIV是除以16的,156/16=9.75刚刚好。所以官方为何要搞这个奇怪的算法?实在是搞不明白

库函数相关部分也是非常奇怪:

9546464f327c76ef55.png (108.62 KB )

9546464f327c76ef55.png

使用特权

评论回复
评论
xu@xupt 2023-9-17 08:38 回复TA
很好的资源,学习啦~~ 
沙发
356053261| | 2023-9-2 21:10 | 只看该作者
四舍五入也很简单啊,如果除数是16,那直接在被除数上先加8,再除以16,同样达到了四舍五入的效果了,
temp_val = (apb_clock + baud_rate / 2) / baud_rate;                        // 四舍五入计算分频值
AT32F403A里的UART分频计算我也改成上面的语句了

使用特权

评论回复
板凳
burningrider| | 2023-9-3 19:00 | 只看该作者
你可以自己写一套计算的算法,输入一个BuadRate就可以了,
但是MCU,通常用设置一次,算法也没办法在其它型号的MCU上重用。

使用特权

评论回复
地板
tpgf| | 2023-9-8 15:42 | 只看该作者
手册上应该是有一个推荐的配置表格

使用特权

评论回复
5
guanjiaer| | 2023-9-8 16:18 | 只看该作者
很多的波特率配置出来之后是有一定的误差率的

使用特权

评论回复
6
keaibukelian| | 2023-9-8 16:46 | 只看该作者
我们在通讯的时候可以使用非常规的波特率吗

使用特权

评论回复
7
观海| | 2023-9-8 18:59 | 只看该作者
关键的问题就是要梳理好时钟线

使用特权

评论回复
8
heimaojingzhang| | 2023-9-8 19:26 | 只看该作者
还好吧 这样的话 可以操作的空间比较大

使用特权

评论回复
9
paotangsan| | 2023-9-8 19:53 | 只看该作者
在有误差的前提下 如果两片之间都有误差会不会导致通讯不成功啊

使用特权

评论回复
10
356053261| | 2023-9-9 23:19 | 只看该作者
keaibukelian 发表于 2023-9-8 16:46
我们在通讯的时候可以使用非常规的波特率吗

可以啊,只要两个设备的波特率设置成一样的就可以了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝