新手上路
- 积分
- 49
- 金钱
- 49
- 注册时间
- 2016-5-20
- 在线时间
- 12 小时
|
发表于 2017-1-12 22:35:21
|
显示全部楼层
可以参考下mosbus协议,判断一帧数据完成就是超时3.5个字符,
需要使用的资源 :定时器1个,串口接收中断,一个接收数组unsigned char【】,1个数组索引unsigned char
步骤
1,初始化定时器,计算溢出时间,modbus是3.5个字符间隔9600大概3.5ms,可以根据自己的需求,
2,初始化USART,打开接收中断
3,在USART接收中断中 接收数据保存在接收缓冲区中, ReadBuffer[Index]=USART_ReceiveData(USART1);
然后Inedx++,启动定时器,TIM的Count置0(TIM重新开始)
4,在定时器中断函数中处理信息,当定时器中断时,表示已经3.5个字符的时间没收到数据了,可以认为接收完成了,最后Index索引置0,准备接收下一帧数据。
参考代码
void USART1_IRQHandler()
{
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
ReadBuffer[Index]=USART_ReceiveData(USART1);
Index++;
TIM_SetCounter(TIM2,0);
TIM_Cmd(TIM2,ENABLE);
}
}
void TIM2_IRQHandler()
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update))
{
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
TIM_Cmd(TIM2,DISABLE);
Index=0;
处理ReadBuffer接收到的数据
}
} |
|