CubeMX配置:FreeRTOS及串口配置

本文通过CubeMX配置F103RCT6的FreeRTOS和串口。

文章目录

  • 1 引入
  • 2 配置过程
    • 2.1 配置时钟过程
    • 2.2 配置FreeRTOS过程
    • 2.3 配置串口过程
  • 3 生成工程代码
  • 4 测试串口
  • 5 总结

1 引入

拿到一个STM32控制器,在啥也没有的情况下从零开始写软件,博主习惯于先配置FreeRTOS操作系统和串口打印。本文就以博主在网上买的小车控制板为例,对其进行最基本的时钟及串口打印配置,并且写一些代码测试一下串口。

2 配置过程

2.1 配置时钟过程

1)首先,新建一个工程,选择MCU型号;
CubeMX配置:FreeRTOS及串口配置_第1张图片
2)在弹出的型号面板中选择自己购买的开发板上的主芯片型号,这里博主是F103RCT6;
CubeMX配置:FreeRTOS及串口配置_第2张图片
3)在SYS中配置Sys Debug方式为Serial wire,Timebase Source配置为Tim1;
CubeMX配置:FreeRTOS及串口配置_第3张图片
4)开发板上的PD0和PD1接了8MHz的晶振,所以选择Crystal/Ceramic Resonator,即使用外部晶振作为HSE的时钟源。
CubeMX配置:FreeRTOS及串口配置_第4张图片
CubeMX配置:FreeRTOS及串口配置_第5张图片
5)时钟树配置如下图;
CubeMX配置:FreeRTOS及串口配置_第6张图片
后续的外设会参考到这里的总线时钟。

2.2 配置FreeRTOS过程

1)在Middleware中选择FreeRTOS,
CubeMX配置:FreeRTOS及串口配置_第7张图片
2)新建一个SerialTask任务,用于执行串口相关代码;
CubeMX配置:FreeRTOS及串口配置_第8张图片
3)在Config Parameter中使能软件定时器;
CubeMX配置:FreeRTOS及串口配置_第9张图片
接着新建一个20ms的软件定时器,设置好回调函数名称和周期调度。
CubeMX配置:FreeRTOS及串口配置_第10张图片

2.3 配置串口过程

将串口配置为如下所示;
CubeMX配置:FreeRTOS及串口配置_第11张图片

3 生成工程代码

1)配置生成代码的IDE为STM32CubeIDE;

CubeMX配置:FreeRTOS及串口配置_第12张图片
2)生成代码配置;
CubeMX配置:FreeRTOS及串口配置_第13张图片
这里博主勾选了只拷贝必要的库文件,以及生成独立的.c/.h文件,看个人习惯。

4 测试串口

1)点击右上角的Generate Code,并Open Projectp;参考网上其他博客,在uart.c中加上重定向函数,这样就可以用printf函数打印数据;

/* USER CODE BEGIN 1 */

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
 HAL_UART_Transmit(&huart4,(uint8_t*)&ch, 1, 0xFFFF);
 return ch;
 }

/* USER CODE END 1 */

注意,该函数加在哪里都可以,并且如果是手写代码,最好加在 USER CODE BEGIN 1 这种注释之间,这样的话下次用CubeMX生成代码就不会被覆盖掉。

2)在MX_FREERTOS_Init函数中启动软件定时器

  /* USER CODE BEGIN RTOS_TIMERS */
  /* start timers, add new ones, ... */
	osTimerStart(Timer20msHandle, 20);
  /* USER CODE END RTOS_TIMERS */

3)在StartSerialTask函数中用串口发送,并进行2000ms延时;

/* USER CODE BEGIN Header_StartSerialTask */
/**
* @brief Function implementing the SerialTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartSerialTask */
void StartSerialTask(void const * argument)
{
  /* USER CODE BEGIN StartSerialTask */
  /* Infinite loop */
  for(;;)
  {
	printf("int:%d\r\n",100U);
    printf("float:%f\r\n",22.3F);
    osDelay(2000);
  }
  /* USER CODE END StartSerialTask */
}

4)在工程配置中勾选下面两项,激活浮点数的打印功能;

CubeMX配置:FreeRTOS及串口配置_第14张图片

6)编译软件,刷到开发板中,通过串口调试助手就可以看到打印的数据;
CubeMX配置:FreeRTOS及串口配置_第15张图片

5 总结

本文记录了CubeMX配置FreeRTOS及串口打印的过程,这是玩转开发板的第一步。

>>返回个人博客总目录

你可能感兴趣的:(单片机,stm32,嵌入式硬件)