STM32 在串口终端增加数据处理后,无法正确接受数据
现象:
1.通过电脑向STM32 串口发送数据0xaa,0x6f,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,当满足一定条件时,串口数据在主函数打印接收到的数据。如第一段代码所示。
2.当在串口1中断增加数据处理时,串口数据只有前两位是正确的,结果为0xaa,0x6f,0x6f,0x6f,0x6f,0x6f,0x0,0x0,0x0,0x0 。如第二段代码所示。
3.当串口1中断只做接收数据时,串口能完整接收数据。如第三段代码所示。
在main.c中用如下代码进行打印:
SMT32用以下代码只有前2个字节数据正确。STM32 打印 结果为0xaa,0x6f,0x6f,0x6f,0x6f,0x6f,0x0,0x0,0x0,0x0,
STM32用以下代码,能够完全接受数据:
1.通过电脑向STM32 串口发送数据0xaa,0x6f,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,当满足一定条件时,串口数据在主函数打印接收到的数据。如第一段代码所示。
2.当在串口1中断增加数据处理时,串口数据只有前两位是正确的,结果为0xaa,0x6f,0x6f,0x6f,0x6f,0x6f,0x0,0x0,0x0,0x0 。如第二段代码所示。
3.当串口1中断只做接收数据时,串口能完整接收数据。如第三段代码所示。
在main.c中用如下代码进行打印:
while(1)
{
if(1==usart_flag)
{
printf("STM32 receive data\r\n");
for(i=0;i<10;i++)
{
printf("0x%x,",usart_buff[i]);
}
printf("\r\n");
usart_flag=0;
}
}
SMT32用以下代码只有前2个字节数据正确。STM32 打印 结果为0xaa,0x6f,0x6f,0x6f,0x6f,0x6f,0x0,0x0,0x0,0x0,
void USART1_IRQHandler(void)
{
u8 key=0;
u16 i=0,j=0;
u8 input=0;
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
while(input!=0xaa)
{
input=USART_ReceiveData(USART1);
}//寻找帧头
usart_buff[count++]=0xaa;
printf("get the head\r\n");
key=USART_ReceiveData(USART1);
usart_buff[count++]=key;
printf("key =0x%x\r\n",key);
#if 1
switch(key)
{
case 'o'://接收到PC->STM32板的消息接收成功消息
{
//获取长度
for(i=0;i<4;i++)
{
usart_buff[count++]=USART_ReceiveData(USART1);
}
//获取data,命令O 没有数据
//获取CRC32
for(i=0;i<4;i++)
{
usart_buff[count++]=USART_ReceiveData(USART1);
}
usart_flag=1;
break;
}
default: break;
}
#endif
}
}
STM32用以下代码,能够完全接受数据:
void USART1_IRQHandler(void)
{
u8 key=0;
u16 i=0,j=0;
u8 input=0;
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
usart_buff[count++]=USART_ReceiveData(USART1);
if(count>8)
{
usart_flag=1;
}
}
}
...全文
相关推荐
STM32使用LCD屏显示串口数据
在本案例中,我们将探讨如何使用STM32利用LCD(液晶显示屏)来显示串口1和串口2的数据,包括16进制和字符串两种形式。首先,我们需要了解STM32的串口通信。
STM32串口收发数据
在实际项目中,开发者可以根据具体需求进行适当的优化和扩展,例如添加多路串口通信、提高波特率、增加数据处理逻辑等。通过这种方式,STM32可以作为可靠的串行通信节点,与PC或其他设备进行高效的数据交互。
HAL库STM32f0串口DMA空闲中断接收fifo数据处理
应用层处理:根据业务需求对收到的数据进行解析和处理。在测试过程中,确保串口、DMA和中断配置正确,通过示波器或逻辑分析仪检查串口通信信号,以及使用终端工具发送和接收数据,验证程序的正确性和稳定性。
基于STM32CubeMX串口通信实验
最后,不要忘记在系统初始化时使能USART1的时钟,并在主函数中启动串口。通过串口终端软件(如PUTTY或RealTerm),我们可以测试串口通信功能,发送和接收数据,验证程序的正确性。
stm32读取陀螺仪MPU6050发送数据到串口
在IAR中,使用HAL库的`HAL_UART_Transmit()`函数可以实现数据发送。确保串口接收端已正确配置,以便接收和解析来自STM32的数据。


单片机/工控
