在Ubuntu中,STM32F103C8T6移植FreeRTOS点亮一盏灯
程序员文章站
2022-06-08 19:57:46
...
1 概述
1.1 资源概述
开发板:STM32F103C8T6最小系统板
开发环境:Ubuntu+CubeIDE
主控芯片型号:STM32F103C8T6
左侧为STLINK烧录器(ST的Nucleo板),右侧为目标板
1.2 芯片简介
C8T6只有64K ROM和20K Ram,比较小,但是可以实现FreeRtos的移植。选择用IDE工具比较香,不用自己写makefile文件,对于菜鸟来说还是实用很多。通过CubeIDE可以实现程序生成编译下载调试等一条龙工作。
2 软件实现
在Ubuntu下安装CubeIDE,打开程序,使用内置的CubeMx配置工具配置芯片,勾选FreeRTOS,由于只有一个任务,因此保持默认配置即可。
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)
{
}
}
编译程序代码,结果如下:
下载程序,点击编译器的Run下载到目标板,报错Fail to start GDB server,这是由于目标版的芯片是山寨芯片(最小系统板10块钱淘宝货),ID不对。使用正版芯片不会有此问题。已经使用ST官方的Nuleo板验证。
我们使用CubeProgrammer软件进行下载。在Ubuntu里边下载程序和擦出芯片比Windows平台快非常多,一瞬间就完成了。
下载完成后,将目标版复位或者重新上电,程序可以正常运行
在移植FreeRTOS时,可能会出现RAM不够的情况,编译报错,这里适当调整下FreeRTOSConfig.h的HEAP_SIZE即可,这个如果调整得太小,会导致部分Task不能正常运行,且编译器不会报错。另外还可以调整单个任务的STACK SIZE,两者结合进行调整。
#define configTOTAL_HEAP_SIZE ((size_t)3072)