HK32F103串口出现数据错误的解决方案!

来源: 深圳市宏德伟创科技有限公司 人气:352 发表时间:2021/09/07 10:53:26

部分客户在使用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发送,这样来完成数据的拼接发送。

关于宏德伟创科技


       宏德伟创科技有限公司总部位于深圳市,具有20年电子元器件分销经验,是电子行业著名的混合型电子元器件一级授权代理商和现货分销,方案技术综合服务商,同时也是中国电子市场价格指数数据采集点,半导体应用联盟发起单位,华强网十大优质供应商。


      我司主营产品:32位单片机MCU、电源IC、二三极管、传感器、肖特基等。
      分销产品:ST、TI、ADI、IR、NXP等。


一级授权代理:美国泰德半导体有限公司、昆山鼎富电子华南地区特约经销商、艾佛森传感器中科芯CKS航顺HK等。产品广泛应用于:数码消费类电子、工业、安防、智能家居、储能电源等电子产品领域。


公司拥有先进的管理体系,完善的客户服务体系和一批高素质的销售服务队伍,一直坚持“质量保证、共荣共赢、不断创新”的经营理念,以专业精神,持续发挥在技术、资金、人力资源方面的优势,为国内外客户提供一流的方案设计、品质、价格等一站式元器件采购服务,立志成为中国最好的电子元器件供应商,为中国半导体行业贡献一份微薄之力!


业务咨询:18173965967 
     技术咨询:0755-83387253   
                  0755-82807699