微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > stm32F407串口通讯怎么把收到的字符一个一个读出来,并且判断?

stm32F407串口通讯怎么把收到的字符一个一个读出来,并且判断?

时间:10-02 整理:3721RD 点击:
各位大神问一下,串口通讯怎么把我发送的字符一个一个读出来,并且判断。我自己写的程序有个bug,就是单独发送第一个字符,也是可以执行程序,而不是一定要验证两个字符才能执行程序。比如下面的程序,我发送a1,程序可以执行,但我发送a,程序也是可以执行的,这个怎么解决?
int main(void)
{
       
        u8 Tx_Buf[8];   //要发送的数据
        u8 t;
        u16 len;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);                //延时初始化
        uart_init(115200);        //串口初始化波特率为115200
        LED_Init();                                  //初始化与LED连接的硬件接口  
        while(1)
        {
                if(USART_RX_STA&0x8000)
                {                                          
                        len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
                       
                        printf("\r\n您发送的消息为:\r\n");
                        for(t=0;t<len;t++)
                        {
                                USART_SendData(USART1, USART_RX_BUF[t]);         //向串口1发送数据
                                Tx_Buf[t]=USART_RX_BUF[t];
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
                        }
                       
                        if(Tx_Buf[0]=='a'&&Tx_Buf[1]=='1')
                                {
                                        LED1=!LED1;
                                        delay_ms(100);
                                       
                                }       
                               
                        printf("\r\n\r\n");//插入换行
                        USART_RX_STA=0;
       
                }
        }       
}       

加入运算机制,比方说特征码计算等,具体做法位发送数据包时发一个,接数据等待是否需要接收第二数据包,或者结束跳出,等第二数据包接到后,与第一联合进行验证,如果是需要执行段,就执行,如果否,中断跳回主程序首段。

你已经有通讯协议,USART_RX_STA&0x8000 只要最后一位接收正确,就会把收到的数据都读出来,这个应该是例程上的程序吧,已OX0A,OX0B也就是回车结尾为判断符;

                        if(Tx_Buf[0]=='a'&Tx_Buf[1]=='1')
                                {
                                                LED1=!LED1;
                                                delay_ms(100);
                                }       
我用这个程序判断我收到的字符,当我收到 a1 这个字符的时候程序是可以执行的,但是我再发送 a 这个字符,程序也是会执行的,我要怎么才只能满足当我只收到 a1 这个字符才能执行程序?

本人新手,水平不够,你能不能写段例程给我看看

这个要具体芯片和相关的数据手册。

越努力,越幸运!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top