[应用相关]

STM32程序进入循环后单片机串口不工作

[复制链接]
173|3
手机看帖
扫描二维码
随时随地手机跟帖
jcky001|  楼主 | 2024-7-10 16:06 | 显示全部楼层 |阅读模式
移植的是正点原子的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总线空闲中断 */
}
}

使用特权

评论回复
盗铃何须掩耳| | 2024-7-11 14:54 | 显示全部楼层
while循环里面有啥

使用特权

评论回复
两只袜子| | 2024-7-12 15:00 | 显示全部楼层
检查时钟配置

使用特权

评论回复
cr315| | 2024-7-12 15:00 | 显示全部楼层
可能是硬件上的问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1445

主题

4031

帖子

6

粉丝