用串口中断接收数据实现LED灯亮灭
用串口中断接收数据实现LED灯亮灭
本资源通过systick中断实现软件消抖,更贴近项目实战,同时使用状态机功能对按键的释放、缺人按下、短按、长按四个状态进行转化
在key_drv.c文件中,初始化了EXTI0、EXTI13和EXTI14,并且通过EXTI0_IRQHandler和EXTI10_15_IRQHandler两个中断服务程序进行了3个LED灯的反转
以串口中断为例,讲解了如何正确的在中断中释放信号量,其中xSemaphoreGiveFromISR(uart_rx_sem, &taskWoken)为中断释放信号量的函数,portYIELD_FROM_ISR(taskWoken)是切换当前的中断任务,使得接收到信号量的任务马上从就绪态转变为运行态
创造两个任务,第一个任务以100ms的速度释放信号量,第二个任务以500ms的速度接收信号量并进行LED翻转,如果按照二值信号量来进行的运行,则肯定会丢失信号量。
该工程为STM32的FreeRTOS工程模板,使用CubeMX配置的。外设只配置了一个UART1,和GPIOA8和GPIOE6。
勤写标兵
持之以恒
知无不言
笔耕不辍
创作能手
新秀勋章
阅读者勋章
新人勋章
技术圈认证