欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在Ubuntu中,STM32F103C8T6移植FreeRTOS点亮一盏灯

程序员文章站 2022-06-08 19:57:46
...

在Ubuntu中,STM32F103C8T6移植FreeRTOS点亮一盏灯

1 概述

1.1 资源概述

开发板:STM32F103C8T6最小系统板
开发环境:Ubuntu+CubeIDE
主控芯片型号:STM32F103C8T6
左侧为STLINK烧录器(ST的Nucleo板),右侧为目标板在Ubuntu中,STM32F103C8T6移植FreeRTOS点亮一盏灯

1.2 芯片简介

C8T6只有64K ROM和20K Ram,比较小,但是可以实现FreeRtos的移植。选择用IDE工具比较香,不用自己写makefile文件,对于菜鸟来说还是实用很多。通过CubeIDE可以实现程序生成编译下载调试等一条龙工作。

2 软件实现

在Ubuntu下安装CubeIDE,打开程序,使用内置的CubeMx配置工具配置芯片,勾选FreeRTOS,由于只有一个任务,因此保持默认配置即可。
在Ubuntu中,STM32F103C8T6移植FreeRTOS点亮一盏灯
FreeRTOS配置
在Ubuntu中,STM32F103C8T6移植FreeRTOS点亮一盏灯
在生成的Task里边增加LED的相关代码

void StartDefaultTask(void const * argument)
{
  /* USER CODE BEGIN 5 */
  /* Infinite loop */
  for(;;)
  {
	  HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);//翻转LED0灯
	  osDelay(300);
  }
  /* USER CODE END 5 */
}

main函数如下

int main(void)
{

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();
  /* definition and creation of defaultTask */
  osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);//默认一个任务
  
  defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);//创建任务
  
  osKernelStart();//启动任务

  while (1)
  {
  }
}

编译程序代码,结果如下:
在Ubuntu中,STM32F103C8T6移植FreeRTOS点亮一盏灯
下载程序,点击编译器的Run下载到目标板,报错Fail to start GDB server,这是由于目标版的芯片是山寨芯片(最小系统板10块钱淘宝货),ID不对。使用正版芯片不会有此问题。已经使用ST官方的Nuleo板验证。
在Ubuntu中,STM32F103C8T6移植FreeRTOS点亮一盏灯
我们使用CubeProgrammer软件进行下载。在Ubuntu里边下载程序和擦出芯片比Windows平台快非常多,一瞬间就完成了。
在Ubuntu中,STM32F103C8T6移植FreeRTOS点亮一盏灯
下载完成后,将目标版复位或者重新上电,程序可以正常运行

在移植FreeRTOS时,可能会出现RAM不够的情况,编译报错,这里适当调整下FreeRTOSConfig.h的HEAP_SIZE即可,这个如果调整得太小,会导致部分Task不能正常运行,且编译器不会报错。另外还可以调整单个任务的STACK SIZE,两者结合进行调整。

#define configTOTAL_HEAP_SIZE                    ((size_t)3072)