测试STM32CubeMX+FreeRTOS实现LED灯闪
这是第一篇,所以配置写的比较多,主要是为了防止自己过一段时间后又忘了,详细记录一下。仅供参考。
试验工具:
1.STM32CubeMX 5.1.0
2.keil uVision4
3.STM32F405RGT6板子(只引出来串口1.2、3个LED、SWD仿真调试口)
4.JLINK下载工具
配置步骤:
1.打开STM32CubeMX 5.1.0,选择你用的STM32芯片
2.配置系统调试端口,我用的是2线SW
3.配置时钟,外部8MHz晶振
4.配置FreeRTOS,参数如下图
5.创建LED任务
6.配置LED口
7.新建工程
8.生成代码,代码生成需要时间,耐心等待
9.程序修改测试
STM32CubeMX 5.1.0配置步骤
1.打开STM32CubeMX 5.1.0,选择你用的STM32芯片
2.配置系统调试端口,我用的是2线SW
选择好,就可以看到右侧SW调试口部分已经变绿色,代表配置成功
3.配置时钟,外部8MHz晶振
4.配置FreeRTOS,参数如下图
5.创建LED任务
在配置参数区,点击选择Tasks and Queues,双击默认任务,修改默认任务为LED任务,具体参数如下图LED任务1
我板子上有3个LED,还可以点击Add添加任务,如图共建立3个LED任务
6.配置LED口
点击LED控制口引脚,选择GPIO_Output,引脚变绿,设置成功。在该引脚右键,选择Enter User Label,填写LED3
按此步骤配置另外2个LED控制端口,配置好,如图6-4所示。
7.新建工程
8.生成代码,代码生成需要时间,耐心等待
9.程序修改测试
打开工程,编译,没问题,option----debug-----use:J-LINK/-Trace Cortex-----settings-----
-----------------------------------------------------Flash Download---add---STM32F4XX Flash-----
-----------------------------------------------------debug----ort:SW------确定----OK
打开程序freertos.c文件,可以看到初始化MX_FREERTOS_Init里面,程序已经自动创建任务LED3Task,我们找到启动任务StartLED3Task
void StartLED3Task(void const * argument)
在for(;;)里面添加灯闪和延时函数
HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);
osDelay(1000);
依次在void StartLED4Task(void const * argument)的for(;;)里面添加灯闪和延时函数
HAL_GPIO_TogglePin(LED4_GPIO_Port,LED4_Pin);
osDelay(1000);
在void StartLED5Task(void const * argument)
在for(;;)里面添加灯闪和延时函数
HAL_GPIO_TogglePin(LED5_GPIO_Port,LED5_Pin);
osDelay(1000);
连接仿真器,烧录程序,可以看到三个灯以相同的频率在闪灭,至此已完成试验。可以试着改变延时时间,是三个灯延时不同,看看灯闪效果。
启动任务灯闪程序如下,作为参考:
void StartLED4Task(void const * argument)
{
/* USER CODE BEGIN StartLED4Task */
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(LED4_GPIO_Port,LED4_Pin);
osDelay(1000);
}
/* USER CODE END StartLED4Task */
}