想要通过串口输入数据控制LED灯,这样可行吗?

2019-07-20 20:44发布

想要通过串口输入数据控制LED灯,下面的中断处理函数可行吗,有哪个地方不对,实际执行是不行的。
//中断处理函数
void USART1_IRQHandler(void)
{
        u8 res;
        if(USART_GetITStatus(USART1,USART_IT_RXNE)){
                res=USART_ReceiveData(USART1);
                USART_SendData(USART1,++res);
                switch(res)
                {
                case 1:
                        GPIO_ResetBits(GPIOF,GPIO_Pin_9);
                case 2:
                        GPIO_ResetBits(GPIOF,GPIO_Pin_10);
                default:
                        GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
                }       
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
xuande
1楼-- · 2019-07-21 00:47

++res
这步已经改变res的值了,注意没?

另外,没有break,每项case都会执行一遍。


BMN李
2楼-- · 2019-07-21 04:41
 精彩回答 2  元偷偷看……
stm32f4菜鸟
3楼-- · 2019-07-21 05:57
本帖最后由 stm32f4菜鸟 于 2016-8-15 15:05 编辑
xuande 发表于 2016-8-15 14:42
++res
这步已经改变res的值了,注意没?

++去掉了,加了break,执行还是不对。仍然控制不了LED灯,求解//中断处理函数
void USART1_IRQHandler(void)
{
        u8 res;
        if(USART_GetITStatus(USART1,USART_IT_RXNE)){
                res=USART_ReceiveData(USART1);
                USART_SendData(USART1,res);
                switch(res)
                {
                case 1:
                        GPIO_ResetBits(GPIOF,GPIO_Pin_9);
                        break;
                case 2:
                        GPIO_ResetBits(GPIOF,GPIO_Pin_10);
                        break;
                default:
                        GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
                        break;
                }        
        }


xuande
4楼-- · 2019-07-21 11:41
 精彩回答 2  元偷偷看……
DongInker
5楼-- · 2019-07-21 14:12
正常中断应该进中断要清中断标志位的,
你串口发送的是十六位模式发送还是字符模式发送,字符发送的1时,对应十六进制是 0X31

一周热门 更多>