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

[复制链接]
1486|10
 楼主| cooldiy_cn 发表于 2023-9-2 20:06 | 显示全部楼层 |阅读模式
本帖最后由 cooldiy_cn 于 2023-9-2 20:28 编辑

为啥要区分整数和小数部分,本来就是16倍,直接除不就行了吗?难道是为了四舍五入吗? 9566664f327cce1ddb.png
按例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刚刚好。所以官方为何要搞这个奇怪的算法?实在是搞不明白
8561364f328b33a64c.png
库函数相关部分也是非常奇怪:
4763464f32a5f3e96a.png
9546464f327c76ef55.png

评论

很好的资源,学习啦~~  发表于 2023-9-17 08:38
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 | 显示全部楼层
手册上应该是有一个推荐的配置表格
guanjiaer 发表于 2023-9-8 16:18 | 显示全部楼层
很多的波特率配置出来之后是有一定的误差率的
keaibukelian 发表于 2023-9-8 16:46 | 显示全部楼层
我们在通讯的时候可以使用非常规的波特率吗
观海 发表于 2023-9-8 18:59 | 显示全部楼层
关键的问题就是要梳理好时钟线
heimaojingzhang 发表于 2023-9-8 19:26 | 显示全部楼层
还好吧 这样的话 可以操作的空间比较大
paotangsan 发表于 2023-9-8 19:53 | 显示全部楼层
在有误差的前提下 如果两片之间都有误差会不会导致通讯不成功啊
356053261 发表于 2023-9-9 23:19 | 显示全部楼层
keaibukelian 发表于 2023-9-8 16:46
我们在通讯的时候可以使用非常规的波特率吗

可以啊,只要两个设备的波特率设置成一样的就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部