UART1超时判断接收完成,当超过6ms没有数据进入串口则认为接收数据完成,下一步可以处理数据。本例把接收到的数据原样返回给UART1.
源码
#include "ecbm_core.h" //加载库函数的头文件。
#define TimeOutSet 3
#define COM_RX1_Lenth 100
u8 RECED_FLAG=0;
u8 RX_TimeOut=0;
u8 RX_Cnt=0;
u8 rcv_buff[COM_RX1_Lenth];//接收缓存
u8 i;
void main(void){ //main函数,必须的。
system_init(); //系统初始化函数,也是必须的。
// gpio_mode(D21,GPIO_OUT);
timer_init();//先初始化定时器。
timer_set_timer_mode(0,20000);//timer0定时2ms
timer_start(0);//再打开定时器0。
while(1)
{
if(RX_TimeOut==0)
{
if(RX_Cnt > 0)
{
for(i=0; i<RX_Cnt; i++) uart_char(1,rcv_buff[i]); //收到的数据原样返回
}
RX_Cnt=0;
RX_TimeOut=TimeOutSet;
}
}
}
void uart1_receive_callback()
{
if(RX_Cnt >= COM_RX1_Lenth) RX_Cnt = 0;
rcv_buff[RX_Cnt++] = SBUF;//收到数据存入缓冲区
RX_TimeOut = TimeOutSet;
}
void timer0_it_callback()
{
if(RX_TimeOut > 0) RX_TimeOut--;
}
效果如图: