CubeMX真是个好东西,使用Cube你的工作量就只有一点点,今天我们使用CubeMX来生成一个带RTOS的3个LED流水灯。废话不多说了。
原理图:
原理图上没有标出LD1,其实LD1是接在PB0上的。
首先是用CubeMX配置时钟如下:
配置PB0,PB7,PB14为GPIO_Output
使能FREERTOS,并添加一个任务:
在配置FREERTOS的Timebase Source时CubeMX强烈建议我们使用定时器,而不使用SysTick,这点有点弄不明白,因为现在绝大多数的RTOS系统时基都是使用SysTick,CubeMX竟然冒天下之大不韪让我们使用Timer来做系统时基,不知用意为何,难道是HAL的底层驱动里也使用到了SysTick?这个问题我没有深究了,希望高人给予指点。
一切配置好之后,生成MDK-ARM V5的项目,打开该项目添加任务代码:
/* StartLedTask function */
void StartLedTask(void const * argument)
{
/* USER CODE BEGIN StartLedTask */
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(LD1_GPIO_Port,LD1_Pin);
osDelay(500);
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
osDelay(500);
HAL_GPIO_TogglePin(LD3_GPIO_Port,LD3_Pin);
osDelay(500);
}
/* USER CODE END StartLedTask */
}
别忘了添加头文件 #include "gpio.h"
大功告成,编译,下载。。。。。。。。。你应该可以看到流水灯了吧!
|