本帖最后由 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传输长度必须大于等于用户最大包长。 最后看一下数据解析效果 本例程基于官方库hc32f460_ddl_Rev2.2.0,请将此例程解压,放到目录hc32f460_ddl_Rev2.2.0\example\ev_hc32f460_lqfp100_v1\usart内测试验证。
|