串口助手控制开发板硬件

2019-07-20 05:56发布

我想使用串口调试助手,通过发送数字,控制32开发板上的硬件。
实现通过串口调试助手发送数字 1:实现LED灯一直处于闪烁状态;发送不是数字 1      LED灯熄灭.怎么打断main函数中的次级while。
我的想法:通过改变uart_init 中MY_NVIC_Init(3,3,USART1_IRQn,2);将此优先级改高。高于main(main的优先级是多少?这个不太了解,没查到),这样void USART1_IRQHandler(void)中接收到的值就会高于主函数的while循环,从而改变while(A)中A的条件,跳出while;

int main(void)
{       
        volatile u16 Res;
       
        u16 t;
        u16 len;       
        u16 times=0;   
        Stm32_Clock_Init(9);        //系统时钟设置
        //uart_init(72,115200);         //串口初始化为115200
        uart_init(72,9600);
        delay_init(72);                            //延时初始化
        LED_Init();                                  //初始化与LED连接的硬件接口
        while(1)
        {
                if(USART_RX_STA&0x8000)//用来判断是否接收到数据
                {                                          
                        len=USART_RX_STA&0x3FFF;//得到此次接收到的数据长度
                        //printf(" 您发送的消息为: ");
                        printf(" 您发送的消息是: ");
                       
                                       

                        for(t=0;t<len;t++) //USART_SendData
                        {
                                USART1->DR=USART_RX_BUF[t];       
                                while((USART1->SR&0X40)==0);//等待发送结束
                        }       

                       
       
                        /***************************/
                        Res=USART_RX_BUF[0];                                //这一句要加上,否则不能正常执行串口助手控制单片机
                        /***************************/
                                while(Res=='1')
                                {
                                printf(" 奥特曼: ");
                                LED0=!LED0;
                                delay_ms(1000);       
                                }
                                LED0=1;
                                printf(" ");//插入换行
                                USART_RX_STA=0;//接收状态标记
                }
                else
                {
                        times++;
                        if(times%5000==0)
                        {
                                printf(" 战舰STM32开发板 串口实验 ");
                                //printf("正点原子@ALIENTEK ");
                                printf("hello world ");
                        }
                        if(times%200==0)printf("请输入数据,以回车键结束 ");  
                        if(times%30==0)
                        {                       
                                LED1=!LED1;//闪烁LED,提示系统正在运行.
                        }

                        delay_ms(10);   
                }
               
        }                 
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
HCHDaLeiGe
1楼-- · 2019-07-20 06:24
进入次级while循环后Res的值没变过...

while(Res=='1')
{
        Res = USART_RX_BUF[0];
        printf(" 奥特曼: ");
        LED0=!LED0;
        delay_ms(1000);        
}
莫西莫西
2楼-- · 2019-07-20 12:19
 精彩回答 2  元偷偷看……

一周热门 更多>