当前位置:网站首页>RT-Thread stm32 基础记录
RT-Thread stm32 基础记录
2022-08-04 12:50:00 【华为云】
准备工作
。
新建 Nano 工程
打开 IDE,点击【文件】-【新建】-【RT-Thread 项目】:
进入新建工程的配置向导:
注:可以通过修改 board.c 的 SystemClock_Config() 更改系统时钟。
工程创建完毕,连接硬件,可直接进行编译下载,如下所示:
编写main.c
将以下代码直接拷贝至main.c
运行结果
在创建工程向导中配置了控制台串口号及其引脚号,所以工程中已经实现了 uart 的驱动以及 rt_hw_console_output() ,默认可以进行打印。打开串口终端,可以发现在终端中执行了打印。
RT-Thread Studio 结合 STM32CubeMx 开发其他外设驱动
使用 RT-Thread Studio 新建 RT-Thread 的项目时直接就将 RT-Thread 实时操作系统移植到对应的芯片上了,省去了系统移植的步骤。
使用 STM32CubeMx 配置工具可以方便快速的配置芯片外设的时钟和引脚,使驱动的开发变得简单。
所以本文将结合这两个 IDE 的优点,介绍基于 RT-Thread Studio 和 STM32CubeMx 的驱动开发。
需要注意的是这里开发的驱动是不基于 RT-Thread 设备驱动框架的,即直接使用 STM32CubeMx 生成的 HAL 库文件来开发外设驱动。
简介
使用 RT-Thread Studio 和 STM32CubeMx 开发驱动可分为以下几个步骤
使用
RT-Thread Studio新建 RT-Thread 工程使用
STM32CubeMx配置外设和系统时钟复制
stm32xxxx_hal_msp.c函数修改
stm32xxxx_hal_config.h文件,打开相应外设支持。替换
board.c文件中时钟配置函数使用外设
新建 RT-Thread 项目
使用 RT-Thread Studio 新建基于 nano-v3.1.3 的工程,界面如下图所示
配置过程可总结为以下步骤:
定义自己的工程名及工程生成文件的存放路径
选择
基于芯片创建工程,选择的 RT-Thread 版本为nano-v3.1.3。选择厂商及芯片型号
配置串口信息
配置调试器信息
工程配置完成后点击下方的 完成 按钮即可创建 RT-Thread 的工程。
基于 Studio 创建 RT-Thread 工程后,就可以基于创建的工程开发自己的驱动。下面将以 stm32l475-atk-pandora 开发板为例,讲解如何开发 ADC 驱动。
配置外设
新建基于目标板卡的 CubeMx 工程,并配置自己需要使用的外设。
例如,示例开发板的 PC2 连接的是 ADC1 的通道 3,使用 CubeMx 生成 ADC 的驱动代码的配置结果如下所示:
复制 stm32xxxx_hal_msp.c 函数
将 CubeMx 生成的代码 stm32l4xx_hal_msp.c 函数复制到 RT-Thread Studio 生成的工程中,并参与工程编译。复制完成后的结果如下图所示
由于我们并没有使用 CubeMx 生成的工程,所以这里需要将 stm32l4xx_hal_msp.c 文件中 #include "main.h" 替换为 #include "board.h"。
打开 HAL 库配置文件对应外设的支持宏
这里我们使用了 ADC 外设,所以需要在 stm32l4xx_hal_config.h 文件中将 ADC 模块使能,取消 ADC 模块的注释即可,示例代码如下
修改系统时钟(可选)
使用 RT-Thread Studio 创建 RT-Thread 工程时默认使用的是系统内部时钟 HSI,这里需要根据自己的板卡配置将 STM32CubeMx 生成的时钟配置函数拷贝到 RT-hread 的工程中。步骤如下
使用 CubeMx 配置自己板卡的系统时钟,并生成代码
复制 CubeMx 工程中
main.c文件的void SystemClock_Config(void)系统时钟初始化函数替换
RT-Thread Studio生成的工程中的drv_clk.c文件中的系统时钟配置函数void system_clock_config(int target_freq_mhz),如下图所示。
- 如果使用外部时钟,则需要更新工程中的
stm32xxxx_hal_conf.h中的对应的外部时钟频率的值,以 HSE 为例,需要修改下面的时钟频率为实际使用的值:
使用外设
上述文件配置完成之后,ADC 外设就可以使用的,在 main.c 中添加外设的使用代码
ADC 外设的使用示例代码如下
编译下载工程,将开发板的 PC2 引脚连接到开发板上的地,终端打印信息如下
将开发板的 PC2 引脚连接到开发板的 3.3V 引脚,终端打印信息如下
从上面两个实验打印结果可以看出我们成功使用了 ADC 外设。
注意事项
board.c文件中的系统时钟配置函数需要根据自己的板卡进行修改stm32xxxx_hal_msp.c函数中主要完成的是外设引脚和时钟的初始化,所以在使用CubeMx生成外设的配置代码时不能选择为每个外设都生成.c/.h文件使用
CubeMx外设时只需要配置实际使用的外设,如果stm32xxxx_hal_msp.c文件和drv_uart.c文件或者drv_spi.c文件外设的初始化函数重定义,需要删除stm32xxxx_hal_msp.c文件中外设的初始化函数。
参考链接:
边栏推荐
- 5 cloud security management strategies enterprises should implement
- 关于mysql join 的一些说明
- 广告电商系统开发之订单处理
- MySQL - Explain explanation
- 为什么密码云服务平台是云时代的必然之选?
- 面试官:连 INSERT INTO SET 都不知道怎么用,你这3年都干些什么了?
- 石子 无限拿
- ES 节点2G内存分析
- Two years of independent development experience Programmers tell us the experience of making money (listen to the masters who really make money)
- 项目里的各种配置,你都了解吗?
猜你喜欢

情人节浪漫3D照片墙【附源码】

Chinese valentine's day of young people crazy to make money, earn 140000 a week

The head module of the yolo series

PMP每日一练 | 考试不迷路-8.4(包含敏捷+多选)

Ceres库运行,模板内报内存冲突问题。(已解决)

MFC的相机双目标定界面设计

如何治理资源浪费?百度云原生成本优化最佳实践

来 TDengine 开发者大会,洞悉数据技术发展的未来趋势

rpm安装提示error: XXX: not an rpm package (or package manifest):

Unity 3D模型展示框架篇之资源打包、加载、热更(Addressable Asset System | 简称AA)
随机推荐
MySQL - Explain详解
8/3 训练日志 (树状数组+区间覆盖+思维+01字典树)
直击面试!阿里金九银十最新面试小册 稳过!
什么是 DevOps?看这一篇就够了!
动规(18)-并查集基础题——团伙
num_workers
The head module of the yolo series
双目立体视觉学习笔记(一)
du命令_set命令选项
七夕疯狂搞钱的年轻人,一周赚14万
新SCADA 系统:集成边缘计算、MQTT 和云平台
业务中我们如何更新缓存?Redis
break与continue超详解!!!
动规(16)-并查集基础题——亲戚(Relations)
【UML】信息系统分析与设计知识点总结
缓存中间件技术选型Memcached、MongoDB、Redis
RobotFramework二次开发(一)
Matlab记录
ReentrantLock 原理
未来已来,只是尚未流行










