1创建自己的项目
1-1选择板子
1-2生成的项目
运行一下看是否创建成功
零警告零错误
2配置STM32Cude
2-1找打如图图标点击(CubeMX的图标)
2-2输入自己安装的路径选中exe文件
点击Browse
找到如图选中,在打开(STM32CubeMX的安装路径可找到)
点击ko
选择型号在ok
2-1配置gpio实现点亮LED
配置时钟
配置UART1
配置下载方式
项目设置
生成代码,生成之后不用打开,直接关闭STM32CubeMX返回RT-Thread Studio即可
3RT-Thread Studio设置
注意
可以看到生成了如下文件
有的不会生成SConscript文件
3-1如果没有可以自己创建此文件(已生成可跳过)
右击cubemx文件创建文件
名字为(SConscript)
创建好之后输入如下内容
import os
from building import *cwd = GetCurrentDir()
src = Glob('*.c')
# add cubemx drivers
src = Split('''
Src/stm32f1xx_hal_msp.c
Src/main.c
''')path = [cwd]
path += [cwd + '/Inc']group = DefineGroup('cubemx', src, depend = [''], CPPPATH = path)Return('group')
再点击如图按键(更新软件包)
运行会看到很多报错(大部分为重复定义)
如int main(void)处
为它添加 __weak 即可
3-2查看时钟是否同步
打开选中的文件
最底部是时钟文件如图
图是已经同步好的,被注释的是原先的时钟
void clk_init(char *clk_source, int source_freq, int target_freq)
{/** Use SystemClock_Config generated from STM32CubeMX for clock init* system_clock_config(target_freq);*/extern void SystemClock_Config(void);SystemClock_Config();
}
如下函数可以打印时钟情况(在主函数填写即可==串口输出)
LOG_D("System Clock information");LOG_D("SYSCLK_Frequency = %d", HAL_RCC_GetSysClockFreq());LOG_D("HCLK_Frequency = %d", HAL_RCC_GetHCLKFreq());LOG_D("PCLK1_Frequency = %d", HAL_RCC_GetPCLK1Freq());LOG_D("PCLK2_Frequency = %d", HAL_RCC_GetPCLK2Freq());
3-3在main函数中写入必要的文件
找到如图的main,c文件打开
添加头文件和必要的初始化函数
启用.c文件
1在文件中右键点击c/c++项目
左侧会弹出如图
在图中启用想要的.c文件(下图画线的是我已经启用的)
如何启动
1右键想启动的文件点击属性
2将图中的沟去点即可 ,并应用即可
之后运行项目的创建配置完成即可编写自己的代码
编写代码实现
/** Copyright (c) 2006-2024, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date Author Notes* 2024-06-26 RT-Thread first version*/#include <rtthread.h>#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>#include "main.h"
#include "usart.h"
#include "gpio.h"int main(void)
{int count = 1;HAL_Init();MX_GPIO_Init();MX_USART1_UART_Init();//设置初始是亮是灭HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, RESET);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, SET);while (count++){//每隔一秒灯的亮灭反转HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_3);HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_5);//串口输出LOG_D("Hello RT-Thread!");//延迟,在延迟期间使用权在内核,由内核分配rt_thread_mdelay(1000);}return RT_EOK;
}
此函数将实现灯的交替闪烁
建议
大家在编写时尽量使用系统的图这样会避免一些不必要的错误