打印
[技术问答]

HC32计算波特率库函数错误反馈

[复制链接]
1071|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 chenxiaolang 于 2019-12-20 22:21 编辑

  本ARM小白在调试HC32F030J8TA时发现官方库函数配置有误地方,情况如下,欢迎大家发表意见讨论。
1、调试UART1,接收和发送映射至PA03、PA04,内核频率32MH,外设频率8MHz.下图是配置UART1参数代码,其中CNT值对波特率至关重要。


2、从单片机向PC发送一个字节0x5A,发现PC端串口助手设置成115200波特率时接收的数据根本不对,改成12800后,接收正常。


3、查证HC32配置波特率的公式如下,按此公式,求得SCNT = 8.68。


4、单步调试查看库函数计算结果,结果为8,也就说直接舍弃了小数部分,没有进行四舍五入的处理。


5、但实际上,CNT取值8和9对波特率的影响非常大,请参照官方提供的参考值。取8更接近12800,8.68四舍五入应该取9,更接近115200。


6、其实从上述计算也能看出来,理论CNT值约接近整数(舍弃或进位的部分越小),波特率误差越小。若实际需要的精度较高,建议调整PCLK和波特率,找到一个合适的CNT。我的解决办法是采用32MHz外设频率。


58225dfcd802904b9.png (93.95 KB )

58225dfcd802904b9.png

使用特权

评论回复
沙发
smartpower| | 2019-12-20 22:42 | 只看该作者
猜,应该是为了省代码尺寸,用了整除算法,没有用浮点算法。

使用特权

评论回复
板凳
martinhu| | 2019-12-22 09:02 | 只看该作者
实际应用中,8M的PCLK,如果要求波特率为115200,不管SCNT取8或者9,误差都有3%或者7%以上,可能误差在3%的情况下,在实验环debug环境下通信可以正常,但是在实际用途中并不一定能保证通信OK,所以我们建议在要求特定波特率的时候,尽量选择误差小的PCLK 配合。

使用特权

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

本版积分规则

15

主题

48

帖子

4

粉丝