HK32MCU应用笔记(四)| 关于老版本HK32F103串口USART偶尔出现数据错误

cathy的头像
cathy 发布于:周二, 09/07/2021 - 09:09 ,关键词:

有部分客户在使用HK32F103系列芯片的串口通讯时,偶尔出现数据错误的原因具体有以下几点:

1.串口通讯时因为可能存在累计误差偶尔造成数据错误。

2.用户在配置串口波特率参数时因为HK有细微地方与ST不同。

下面就以上原因,用户根据如下修改,可以使串口通讯正常工作。

对于波特率累计误差,用户可以采用三种方式来解决:

1. 修改STOP bit位数,把stop bit设成0.5,但是我们芯片的发送stop bit宽度也会变成0.5。这种方法要注意的是:对方芯片有可能无法接受0.5 stop bit。

2.把波特率设置稍微提高1%左右。比如对方发出115200bps,HK的芯片波特率需要设置为115200*1.01=116352bps(偏差小于1%)。

3.建议HK芯片和对方发送数据时,都不要背靠背发送。

关于上述第二种波特率参数配置,主要是用户需要较高的波特率时,导致波特率配置寄存器的整数部分为1,还存在小数部分的情况。这时HK芯片对小数部分会被忽略掉,导致USART输出的bit宽度不对。出现这种应用时,用户需要调整USART工作频率和波特率的关系,避免波特率配置寄存器的整数部分为1,还存在小数部分。

另外应用串口(USART)还应注意以下2点:

1.串口USART RX IDLE中断问题

用户串口通讯打开了RX IDLE中断后出现反复进入的原因是因为IDLE中断标志不能清除。

◆解决方法:

Step 1. 关闭IDLE 中断.

Step 2. 在RXNE 事件后:

A. 清除IDLE标志.

B. 然后使能IDLE中断.

Step 3. 在IDLE中断触发后: 除能IDLE中断.

2.串口USART使用DMA传输时, DMA通道关闭后DMA_CNDTRn值Reload的问题。

这个与我们HK的DMA设置与ST略有不同,HK的DMA通道在关闭后,对应的DMA_CNDTRn的值会被重新加载为本次发送开始前用户配置的值(即已经发送的数据个数)。如果客户在dma发送完成后关闭了对应的通道,然后读取其DMA_CNDTRn的值就会出现非零值。如果用户想要使用拼接方式发送数据(在一次数据未发完前追加新的数据发送)且前一次数据已发送完成的情况下就会出现错误的数据拼接。

处理数据拼接的解决方案:

如果是单次数据发送模式,用户在DMA数据发送完成后不用关闭DMA通道,在追加新的数据发送时,先在未关闭DMA通道的情况下调用库函数读出DMA_CNDTRn寄存器的值,再关闭DMA通道,然后追加新的数据到缓存buffer(可能是用户在RAM中定义的一个数组),再启用DMA发送,这样来完成数据的拼接发送。

相关阅读:
HK32MCU应用笔记(一)| HK32F030X系列在PH测量笔的应用
HK32MCU应用笔记(二)| 国外品牌采用航顺HK32F030R8T6代替出现串口不兼容解决方法
HK32MCU应用笔记(三)| 航顺芯片在5G光纤测试仪的应用

来源:航顺芯片
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 349