高级会员

- 积分
- 562
- 金钱
- 562
- 注册时间
- 2018-7-8
- 在线时间
- 118 小时
|
发表于 2018-11-15 18:19:48
|
显示全部楼层
//串口中断函数
void USART1_IRQHandler(void) //串口1中断服务程序
{
#ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了.
OSIntEnter();
#endif
//接收中断(接收到的数据必须是0x0d 0x0a结尾),等价于先读USART1—>SR
if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)
{
//读取数据 注意:这句必须要,否则不能够清除中断标志位。
//IDLE必须是有软件序列清除,先读USART1—>SR,再读USART1—>DR
USART_ReceiveData(USART1); //等价于读USART1—>DR
Usart1_Rec_Cnt = DMA_Rec_Len - DMA_GetCurrDataCounter(DMA1_Channel5); //算出接本帧数据长度
//***********帧数据处理函数************//
printf("\r\nThe lenght:%d\r\n",Usart1_Rec_Cnt);
printf("The data:\r\n");
Usart1_Send(DMA_Rece_Buf,Usart1_Rec_Cnt);
printf("Over! \r\n");
//*************************************//
USART_ClearITPendingBit(USART1, USART_IT_IDLE); //清除中断标志
MYDMA_Enable(DMA1_Channel5); //恢复DMA指针,等待下一次的接收
}
#ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了.
OSIntExit();
#endif
}
你好,请问这里面的USART_ClearITPendingBit(USART1, USART_IT_IDLE); //清除中断标志可以删掉吗,
库函数中,说明了,
a read operation to USART_SR register
* (USART_GetITStatus()) followed by a read operation to USART_DR register
* (USART_ReceiveData()).
。 |
|