打印
[综合信息]

HC32F460 UART TIMEROUT功能设置

[复制链接]
1837|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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计数值。按照这个计算方式,我们来测试一下这个时间是不是对的。


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




需要注意以下事项:
1.    超时中断后,必须软件关闭TIMER0,并清除TIMER0计数。
2.    超时中断内软件重置目标地址和传输计数器(硬件重置方式,后续再整理)。
3.    DMA传输长度必须大于等于用户最大包长。
最后看一下数据解析效果
附上工程。 uart_dma_timeout.rar (232.43 KB)
本例程基于官方库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的波特率时钟。修改后的代码见附件。


uart_dma_timeout.zip

675.55 KB

使用特权

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

本版积分规则

4

主题

32

帖子

1

粉丝