提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
记录了学习FreeRTOS在STM32上的实验,并成功并行运行LED闪烁和串口打印文字的任务。
一、通过CubeMX新建工程
- 打开CubeMX,选择芯片,笔者这里用小蓝板,也就是F103C8T6做测试。
- 设置时钟,调试接口。
这里注意Timebase Source不要选RTOS用到的systick
。
- 初始化板载LED和串口
这里注意,LED要初始为高电平
,不然复位的时候会闪一下。
- 在中间件里初始化freeRTOS,选项默认即可。
- 用CubeMX创建LED闪烁和串口发送的任务。
二、编写LED闪烁和串口打印的部分代码
生成代码后,在freertos.c
文件里编写代码。
1.LED定时1s闪烁
/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the Borad_LED thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void* argument)
{
/* USER CODE BEGIN StartTask02 */
/* Infinite loop */
for(;;)
{
vTaskDelay(1000);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
}
/* USER CODE END StartTask02 */
}
2.串口定时1s打印
代码如下(示例):
/* USER CODE BEGIN Header_StartTask03 */
/**
* @brief Function implementing the UART_TX thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask03 */
void StartTask03(void* argument)
{
/* USER CODE BEGIN StartTask03 */
/* Infinite loop */
for(;;)
{
vTaskDelay(1000);
char s[100];
sprintf(s, "你好\r\n");
HAL_UART_Transmit(&huart1, (uint8_t*)s, strlen(s), 0xff);
}
/* USER CODE END StartTask03 */
}
实验验证
编译收获两个蛋
下载运行
如果一切正常,应该可以看到板载的LED一秒亮灭一次。连上串口,由于XCOM不支持UTF-8
显示中文,这里使用一款支持的软件MobaXterm
。
选择新建会话
选择串口,填对比特率。
就可以看到,串口的发送与点灯的操作同步进行了。
总结
这里记录了笔者第一次学习FreeRTOS的过程,并成功同时运行了点灯和串口的操作,等笔者考完期末,有空会继续跟新