OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3199|回复: 2

串口助手控制开发板硬件

[复制链接]

11

主题

60

帖子

0

精华

高级会员

Rank: 4

积分
635
金钱
635
注册时间
2018-3-26
在线时间
107 小时
发表于 2018-9-29 11:23:07 | 显示全部楼层 |阅读模式
我想使用串口调试助手,通过发送数字,控制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("\r\n您发送的消息为:\r\n\r\n");
                        printf("\r\n您发送的消息是:\r\n\r\n");
                       
                                       

                        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("\r\n奥特曼:\r\n\r\n");
                                LED0=!LED0;
                                delay_ms(1000);       
                                }
                                LED0=1;
                                printf("\r\n\r\n");//插入换行
                                USART_RX_STA=0;//接收状态标记
                }
                else
                {
                        times++;
                        if(times%5000==0)
                        {
                                printf("\r\n战舰STM32开发板 串口实验\r\n");
                                //printf("正点原子@ALIENTEK\r\n\r\n");
                                printf("hello world\r\n\r\n");
                        }
                        if(times%200==0)printf("请输入数据,以回车键结束\r\n");  
                        if(times%30==0)
                        {                       
                                LED1=!LED1;//闪烁LED,提示系统正在运行.
                        }

                        delay_ms(10);   
                }
               
        }                 
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

204

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2443
金钱
2443
注册时间
2017-9-13
在线时间
559 小时
发表于 2018-9-29 17:00:46 | 显示全部楼层
进入次级while循环后Res的值没变过...

while(Res=='1')
{
        Res = USART_RX_BUF[0];
        printf("\r\n奥特曼:\r\n\r\n");
        LED0=!LED0;
        delay_ms(1000);        
}
回复 支持 反对

使用道具 举报

11

主题

60

帖子

0

精华

高级会员

Rank: 4

积分
635
金钱
635
注册时间
2018-3-26
在线时间
107 小时
 楼主| 发表于 2018-9-30 08:23:25 | 显示全部楼层
HCHDaLeiGe 发表于 2018-9-29 17:00
进入次级while循环后Res的值没变过...

while(Res=='1')

while(Res=='1')
{
        Res = USART_RX_BUF[0];
        printf("\r\n奥特曼:\r\n\r\n");
        LED0=!LED0;
        delay_ms(1000);        
}

拿到里面,其实效果也一样。res没有收到改变。输入其他值不能改变现有状态
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 18:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表