[综合信息] HC32F460 UART TIMEROUT功能设置

[复制链接]
2529|2
 楼主| kensilong 发表于 2022-1-4 18:22 | 显示全部楼层 |阅读模式
本帖最后由 kensilong 于 2022-1-6 15:04 编辑

大伙新年好,近期有部分朋友询问如何使用HC32F460 UART_TIMEOUT功能,以及这个时间是如何计算的。下面就解析一下其原理和相关的设置,并附上代码和测试波形。希望对一些刚接触HC32F460的朋友有所帮助。
原理是每次UART收到一个数据停止位,硬件事件启动TIMER0,同时TIMER0 CNT清零。需要用到硬件事件,所以AOS必须打开。
如何计算时间TIMEOUT时间?
首先必须保证TIMEOUT时间必须大于一帧数据时间,比如115200一个起始位,一个结束位,8位数据, 一帧数据时间,1/115200 *10 bits 大概86.8us时间。因此超时时间要超过这个时间。
这时确定TIMER0的时间就好办了,本例程TIMER0时钟用pclk1,定时100us超时。200MHZ主频,PCLK1为100MHZ,100us时间需要计算,大概是10000计数值。按照这个计算方式,我们来测试一下这个时间是不是对的。
100us设置.png 100us超时波形.png

再验证一下超时时间200us的效果。

200us设置.png
200us超时波形.png

需要注意以下事项:
1.    超时中断后,必须软件关闭TIMER0,并清除TIMER0计数。
2.    超时中断内软件重置目标地址和传输计数器(硬件重置方式,后续再整理)。
3.    DMA传输长度必须大于等于用户最大包长。
最后看一下数据解析效果
不同包长数据解释.png
附上工程。 uart_dma_timeout.rar (232.43 KB, 下载次数: 35)
本例程基于官方库hc32f460_ddl_Rev2.2.0,请将此例程解压,放到目录hc32f460_ddl_Rev2.2.0\example\ev_hc32f460_lqfp100_v1\usart内测试验证。
caigang13 发表于 2022-1-4 18:37 来自手机 | 显示全部楼层
楼主讲的不错,详细。
 楼主| kensilong 发表于 2022-7-19 12:19 | 显示全部楼层
更正一下之前这个贴子用法,从用户手册上看,必须设置UART为时钟输出模式。另外TMR0的时钟为异步时钟,ASYNCLK和SYNSA都要设置为1,这样才能使用对应UART的波特率时钟。修改后的代码见附件。
7079862d6256133fa8.png

uart_dma_timeout.zip

675.55 KB, 下载次数: 19

您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

38

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部