库函数里USART波特率分频的计算感觉过于复杂
本帖最后由 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刚刚好。所以官方为何要搞这个奇怪的算法?实在是搞不明白
库函数相关部分也是非常奇怪:
四舍五入也很简单啊,如果除数是16,那直接在被除数上先加8,再除以16,同样达到了四舍五入的效果了,
temp_val = (apb_clock + baud_rate / 2) / baud_rate; // 四舍五入计算分频值
AT32F403A里的UART分频计算我也改成上面的语句了 你可以自己写一套计算的算法,输入一个BuadRate就可以了,
但是MCU,通常用设置一次,算法也没办法在其它型号的MCU上重用。
手册上应该是有一个推荐的配置表格 很多的波特率配置出来之后是有一定的误差率的 我们在通讯的时候可以使用非常规的波特率吗 关键的问题就是要梳理好时钟线
还好吧 这样的话 可以操作的空间比较大
在有误差的前提下 如果两片之间都有误差会不会导致通讯不成功啊
keaibukelian 发表于 2023-9-8 16:46
我们在通讯的时候可以使用非常规的波特率吗
可以啊,只要两个设备的波特率设置成一样的就可以了
页:
[1]