摘要:利用CubeMx配置freeeRTOS建立任务并使用事件组实现按键按下时 LED开关和打印信息到串口,上位机接收显示。
验证STM32CubeMx配置的FreeRTOS的任务和事件组使用
方案:按下Key1,绿灯亮或者灭,同时串口打印Key1被按下了到上位机;相关端口和串口配置省略。
新建三个任务:
1》 按键扫描 KeyScan;
2》 灯开关 LEDToggle;
3》 串口打印 PrintTask
添加事件组:
然后代码生成即可。
代码生成后,任务和事件组的定义均生成在freeRTOS.c的代码中,串口代码在Usart.c,按键和LED灯的配置在GPIO.c中。
根据要实现的功能补充相关代码:LED灯的toggle, 串口使用Printf输出,此类代码可以从开发板自带的实验代码中获取,在此不做陈述。
关键代码如下:
1. 按键扫描任务的代码:
本想将该函数(KeyScanFunction)不放置在freeRTOS.c中,但是要使用事件组的句柄(UserEventHandle),该句柄在定义文件中,好像没有办法extern出去。
2. LED开关任务代码:
当keyScanFunction检测到Key1按下后,设置时间KEY1,LedToggleFunction等待有效,突破阻塞,往下执行LED1_TOGGLE,实现LED开关
3. 打印任务代码:
当keyScanFunction检测到Key1按下后,设置时间KEY1,PrintTaskFunction等待有效,突破阻塞,往下执行Printf(),上位机收到打印的字符。