1. **STM32CubeMX配置
**
打开stm32cubemx软件找到所用芯片。Debug选项改为 Serial Wire 并且时钟源要改为空闲的time 。系统时钟则留给FreeRTOS使用
|
| ---------------------------------------------------------------------------------------------------------------- |
如图根据硬件原理图配置晶振
|| ------------------------------------------- |
GPIO引脚配置
| ------------------------------------------- |
FreeRTOS配置 选择一个rtos 版本
| |
| ------------------------------------------- |
先使用默认配置默认创建一个线程
点击右上角GENERATE CODE 按键生成代码
2. 代码分析
创建LED的函数
/**
* @brief LED应用线程
* @param argument
*/
void LED_Thread(void const *argument)
{
for (;;)
{
LED_ON('R');
printf("\r\nLED 红\r\n");
osDelay(500);
LED_OFF('R');
LED_ON('G');
printf("\r\nLED 绿\r\n");
osDelay(500);
LED_OFF('G');
LED_ON('B');
printf("\r\nLED 蓝\r\n");
osDelay(500);
LED_OFF('B');
}
}
/**
* @brief 开启LED
* @param led_num
*/
void LED_ON(char led_num)
{
switch (led_num)
{
case 'R':
{
HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_RESET);
}
break;
case 'G':
{
HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_RESET);
}
break;
case 'B':
{
HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_RESET);
}
break;
default:
break;
}
}
/**
* @brief 关闭LED
* @param led_num
*/
void LED_OFF(char led_num)
{
switch (led_num)
{
case 'R':
{
HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_SET);
}
break;
case 'G':
{
HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_SET);
}
break;
case 'B':
{
HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_SET);
}
break;
}
}
在FreeRTOS.c 中添加所编写的函数
void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN StartDefaultTask */
/* Infinite loop */
for(;;)
{
LED_Thread(argument);
osDelay(1);
}
/* USER CODE END StartDefaultTask */
}