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)注释掉,也还在发,应该是在发存着的数据
初始化完,复位后不理解寄存器中哪来的数据,卡在这两个循环,导致接收中断一直进不去,求大佬解惑
(标签-stm32|关键词-while)
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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数组中。请注意,这只是一个简单的示例代码,你可能需要根据你的具体需求和硬件情况进行修改。
解决 无用评论 打赏 举报