acqq.t 2025-04-18 20:48 采纳率: 9.1%
浏览 14

(标签-stm32|关键词-while)


u16 USART3_RX_STA[3] = { 0 };       //接收状态标记      
u8 Num = 0;              //接收数据的当前位置


void Read_Data(u16 *Data)           
{    
    u8 y=0;
//    u16 Receive_data = 0;       //数据缓存区
    
    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET)
    {
        usart_printf("非空!\r\n");
    }
    USART_SendData(USART3, 0x57);
    while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
    {
        usart_printf("没发完!\r\n");
    }
    
///////////////////////////数字量数值///////////////////////////////    
    
    while(Num != 1)
    {
        
        delay_ms(1);
        if(y>5)
        {
            y=0;
            break;
        }
        y++;
    }
    *Data = USART3_RX_STA[0];
    
///////////////////////////数字量数值///////////////////////////////    

    Num = 0; 
}
stm32f103rct6 通过串口读取灰度传感器的数据,但这个函数一直卡在这两个while循环中,标志位表明寄存器中一直有数据在发送,且一直没有发完,即便将USART_SendData(USART3, 0x57)注释掉,也还在发,应该是在发存着的数据
  初始化完,复位后不理解寄存器中哪来的数据,卡在这两个循环,导致接收中断一直进不去,求大佬解惑
  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-04-18 20:48
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题解答

    你的问题是关于STM32单片机的 USART3 接收数据的实现,使用 C 语言编写。

    问题中提到使用 while 循环来读取 USART3 接收数据,但是没有提供完整的代码。

    根据问题,可能是你想实现一个循环来读取 USART3 接收数据,并将其存储在 USART3_RX_STA 数组中。

    以下是一个简单的示例代码:

    while (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) {
        USART3_RX_STA[Num] = USART_ReceiveData(USART3);
        Num++;
    }
    

    这个代码使用 USART_GetITStatus 函数来检查 USART3 接收数据是否已经准备好,然后使用 USART_ReceiveData 函数来读取接收数据,并将其存储在 USART3_RX_STA 数组中。

    请注意,这只是一个简单的示例代码,你可能需要根据你的具体需求和硬件情况进行修改。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月18日