RT-Thread与STM32CubeMX联合开发
一:前置条件
1.1软件环境
RT-Thread Studio
STM32CubeMX
上一节我们已经讲过如何安装RT-Thread Studio,
STM32CubeMX的安装参照: STM32CubeMX安装教程
二:CubeMX配置
首先我们在上一节创建好的工程下找到 CubeMX Setting,双击打开后进入配置界面
打开①System Core进入系统配置,②进入RCC界面使用外部时钟
进入Clock Configuration界面配置时钟数,我这里使用的是F407系列,时钟最高频率为168MHz,时钟频率根据你的单片机时钟频率而定
接着开始配置串口,由于我们在上一节使用的USART1作为rtthread日志输出,因而在CubeMX我们也打开USART1串口**(必须配置否则会最后编译会报错),波特率设置为默认的115200
修改代码生成方式,单独生成.c和.h文件
下面是重点!!!!!
由于RT-Thread系统会接管STM32相关的系统中断,也就是重定义HardFault_Handler、PendSV_Handler、SysTick_Handler这三个中断函数,因此此过程中不需要在CubeMX的NVIC下生成相关代码,具体配置如下
取消勾选上述三个中断函数,然后可以点击GENERATE CODE**生成代码
注意!!!!第一次生成代码后需要关闭CubeMX软件,否则生成的代码不会同步到RT-Thread Studio里(不知道是BUG还是什么)。
生成完毕后工程文件里会多出一个cubemx文件目录,下面我们做进一步配置
打开SConscript找到如下代码段
Src/main.c
在此代码段后添加
Src/gpio.c
Src/usart.c
Src/stm32f4xx_it.c
原因:CubeMX再勾选分别生成.C和.H文件后不会将main.c以外的源文件生成到工作空间内,需要我们手都配置,你配置了哪些外设就添加哪些,我们刚刚配置了GPIO,串口和中断,因此我们需要把这三个写进SConscript文件。
配置完毕后右击SConscript选择同步scons配置进项目,然后编译看看有没有报错。没有报错后我们打开cubemx/Src/main.c文件
// An highlighted block
__WEAK int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
进入main.c文件后将这段代码中的复制到application/main.c的while(1)之前
//--------------------
HAL_Init();
MX_GPIO_Init();
MX_USART1_UART_Init();
接着添加头文件
//添加头文件
#include "main.h"
#include "usart.h"
#include "gpio.h"
这里说明为什么cubemx生成的main.c文件会有一个**__WEAK** 标志,这是因为同一个工作空间下出现了两个相同的main函数,我们只需要直线applications目录下的main函数,因此需要使用__WEAK弱化掉cubemx里的main函数。
至此CubeMX移植完全结束,下面进行编译烧录代码
三:现象
串口正常显示如下则说明我们联合开发成功