目标

  • 移植 最新版本 FreeRTOS 到 nucleo-L476RG 开发板,MCU 是 STM32L476RGT6

开发环境

  • Win10 64位
  • Keil MDK 5.36
  • STM32CubeMX 6.11.1

移植准备

  • 使用 STM32CubeMX 6.11.1 快速搭建 nucleo-L476RG 开发板 的 Keil MDK5 的裸机工程
  • 打开 STM32CubeMX, 在 STM32CubeMX 搜索 nucleo-L476RG,会找到这个开发板,双击即可创建开发板的配置

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》_Keil MDK

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》_stm32_02

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》_Keil MDK_03

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》_#define_04


FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》_开发板_05

  • 可以简单查看一下配置,基本可以保持不变。
  • 在 【Project Manager】项目管理的页面,选择 Keil MDK5 工程
  • 点击 【GENERATE CODE】生成 Keil MDK5 的工程

编译与下载

  • 打开生成的 Keil MDK5 工程 stm32l475_freertos\MDK-ARM\stm32l475_freertos.uvprojx,点击编译,即可正常编译通过

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》_Keil MDK_06

  • 点击下载,也可以点击【调试】按钮,进入调试模式,确认程序下载后是否正常工作

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》_stm32_07

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》_#define_08

  • 默认 工程初始化后,进入了 while (1) 死循环,点击 【停止】调试的按钮,如果当前运行一直在 while (1) 死循环中,基本确认程序正常运行,而没有进入 异常,如 hardfault 等。

裸机 LED 闪烁

  • 通过原理图,确认 LED 的引脚是:PA5,并且工程默认已经配置了
#define LD2_Pin GPIO_PIN_5
#define LD2_GPIO_Port GPIOA
  • 测试代码: main 函数 while (1) 循环中增加如下的 LED 状态切换的代码
  • 默认可以使用 HAL_Delay 进行延时(单位 毫秒),底层基于 systick 定时器
while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
      HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
      HAL_Delay(500);
      HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
      HAL_Delay(500);
  }
  • 编译下载后, 开发板 LED 闪烁起来,可见使用 ST 的代码生成工具 STM32CubeMX,可以大大降低 Keil MDK5 基本工程的搭建难度,提高开发的效率

小结

  • 本篇主要记录一下 nucleo-L476RG 开发板使用 STM32CubeMX 快速搭建 Keil MDK5 工程的方法,有了基本的裸机工程,验证开发板程序编译、下载、运行情况
  • 后面开始记录 FreeRTOS 的移植(手动移植)方法,了解 RTOS 的运行