部分客户在使用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等。产品广泛应用于:数码消费类电子、工业、安防、智能家居、储能电源等电子产品领域。
公司拥有先进的管理体系,完善的客户服务体系和一批高素质的销售服务队伍,一直坚持“质量保证、共荣共赢、不断创新”的经营理念,以专业精神,持续发挥在技术、资金、人力资源方面的优势,为国内外客户提供一流的方案设计、品质、价格等一站式元器件采购服务,立志成为中国最好的电子元器件供应商,为中国半导体行业贡献一份微薄之力!