论坛元老
 
- 积分
- 10653
- 金钱
- 10653
- 注册时间
- 2017-4-14
- 在线时间
- 2780 小时
|
发表于 2019-3-19 16:28:57
|
显示全部楼层
本帖最后由 nashui_sx 于 2019-3-19 16:31 编辑
USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); //开启串口空闲IDEL中断
void USART1_IRQHandler(void) //串口1中断服务程序
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)//空闲中断
{
USART_RX_STA |= 0x8000;
USART_ReceiveData(USART1); // Clear IDLE interrupt flag bit
}
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART1); //读取接收到的数据
if((USART_RX_STA&0x8000)==0)
USART_RX_BUF[USART_RX_STA++]=Res;
if(USART_RX_STA>100)USART_RX_STA |= 0x8000;
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
}
while(1)
{
if( USART_RX_STA&0x8000)
{
if(USART_RX_BUF[0]==0xff)
{
if(USART_RX_BUF[USART_RX_STA&0x3fff-1]==FucCheckSum(USART_RX_BUF,USART_RX_STA&0x3fff))//校验
{
if(USART_RX_BUF[1]==0x86)//处理命令
{
printf("nongdu=%d\r\n",USART_RX_BUF[2]*256+USART_RX_BUF[3]);
}
//...
}
}
USART_RX_STA=0;
}
}
u8 FucCheckSum(unsigned char *i,u32 ln)
{
unsigned char j,tempq=0;
i+=1;
for(j=0;j<ln-2;j++)
{
tempq+=*i;
i++;
}
tempq=(~tempq)+1;
return tempq;
}
|
|