我想使用串口调试助手,通过发送数字,控制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);
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
while(Res=='1')
{
Res = USART_RX_BUF[0];
printf(" 奥特曼: ");
LED0=!LED0;
delay_ms(1000);
}
一周热门 更多>