#define USART_RECEIVE_LENGTH 200
uint16_t USART_RECEIVE_STATE = 0;
uint8_t USART_RECEIVE_BUFF[USART_RECEIVE_LENGTH];
void USART1_IRQHandler(void)
{
uint8_t RECEIVE_DATA;
if(USART_GetITFlag(USART1, USART_IT_RXNE) != RESET)
{
RECEIVE_DATA = USART_ReceiveData(USART1);
if(USART_RECEIVE_STATE & 0x8000 == 0)
{
if(RECEIVE_DATA & 0x4000)
{
if(RECEIVE_DATA != 0x0A)
USART_RECEIVE_STATE = 0;
else
USART_RECEIVE_STATE = 0x8000;
}
else
{
if(RECEIVE_DATA == 0x0D)
USART_RECEIVE_STATE = USART_RECEIVE_STATE | 0x4000;
else
{
USART_RECEIVE_BUFF[USART_RECEIVE_STATE & 0x3FFF] = RECEIVE_DATA;
USART_RECEIVE_STATE++;
if(USART_RECEIVE_STATE > USART_RECEIVE_LENGTH - 1)
USART_RECEIVE_STATE = 0;
}
}
}
}
}
stm32串口通信中断函数
于 2024-03-23 08:04:01 首次发布
这篇文章详细描述了如何在C语言中处理USART1的接收中断,包括接收数据的存储、状态管理以及换行符检测。函数`USART1_IRQHandler`负责接收数据并更新USART的状态以控制缓冲区的操作。
摘要由CSDN通过智能技术生成