移植的是正点原子的ESP8266代码,在进入while(1)之前可以接收到从串口助手发送的消息,进入while(1)之后就接收不到了,接收中断函数如下
void ATK_MW8266D_UART_IRQHandler(void)
{
uint8_t tmp;
if (__HAL_UART_GET_FLAG(&g_uart_handle, UART_FLAG_ORE) != RESET) /* UART接收过载错误中断 /
{
__HAL_UART_CLEAR_OREFLAG(&g_uart_handle); / 清除接收过载错误中断标志 /
(void)g_uart_handle.Instance->SR; / 先读SR寄存器,再读DR寄存器 */
(void)g_uart_handle.Instance->DR;
// printf("debug");
}
if (__HAL_UART_GET_FLAG(&g_uart_handle, UART_FLAG_RXNE) != RESET) /* UART接收中断 */
{
HAL_UART_Receive(&g_uart_handle, &tmp, 1, HAL_MAX_DELAY); /* UART接收数据 */
if (g_uart_rx_frame.sta.len < (ATK_MW8266D_UART_RX_BUF_SIZE - 1)) /* 判断UART接收缓冲是否溢出
* 留出一位给结束符'\0'
*/
{
g_uart_rx_frame.buf[g_uart_rx_frame.sta.len] = tmp; /* 将接收到的数据写入缓冲 */
g_uart_rx_frame.sta.len++; /* 更新接收到的数据长度 */
// printf("debug1");
}
else /* UART接收缓冲溢出 /
{
g_uart_rx_frame.sta.len = 0; / 覆盖之前收到的数据 /
g_uart_rx_frame.buf[g_uart_rx_frame.sta.len] = tmp; / 将接收到的数据写入缓冲 /
g_uart_rx_frame.sta.len++; / 更新接收到的数据长度 */
}
// printf("debug2");
//printf("%s",g_uart_rx_frame.buf);
}
if (__HAL_UART_GET_FLAG(&g_uart_handle, UART_FLAG_IDLE) != RESET) /* UART总线空闲中断 */
{
g_uart_rx_frame.sta.finsh = 1; /* 标记帧接收完成 */
// printf("debug3");
// printf("%s",g_uart_rx_frame.buf);
__HAL_UART_CLEAR_IDLEFLAG(&g_uart_handle); /* 清除UART总线空闲中断 */
}
} |