rtthread学习之(2)——STM32 系列外设驱动添加指南
1. 简介
本文档是为需要给现有的 STM32 BSP 添加更多外设驱动的开发者准备的。通过阅读本文,开发者可以按照自己的实际情况给现有 BSP 添加自己需要的驱动。
2. 前提要求
- 熟练使用 ENV 工具,参考:RT-Thread env 工具用户手册
- 熟悉 Kconfig 语法
- 熟悉 STM32CubeMX 工具
- 对 RT-Thread 设备驱动框架有一定了解
3. 如何添加更多的外设驱动选项
本章节以添加片上外设驱动为例,讲解如何为 BSP 添加更多可用驱动。如果想使用的片上外设是 片上外设配置菜单
里没有的,就需要开发者自己添加了。下面我们将演示如何为 stm32f429-atk-apollo BSP 添加 SPI3 驱动。
没有安装 stm32cubemx 软件的可以访问 STM32cube中文网:http://www.stm32cube.com/ ,在
资源下载
里下载 stm32cubemx 软件。
阿波罗 BSP 默认只支持 SPI1、SPI2 和 SPI5,是不支持 SPI3 的。开发者如果需要使用 SPI3,则需要自己添加。
添加 SPI3 的外设支持需要以下几步:
1)打开 STM32CubeMX 工程
打开 BSP 的 STM32CubeMX 配置文件。
2)按原理图配置 SPI3 的引脚,并生成代码
按图示顺序配置 SPI3,并生成代码。
为 BSP 添加驱动时,STM32CubeMX 工具可以快速的完成使能外设和配置管脚的工作。而外设初始化,中断配置,DMA配置等等则由 RT-Thread 提供的驱动文件来完成。也就是说,虽然 STM32CubeMX 生成了多个文件用来初始化外设,但 RT-Thread 只使用了 STM32CubeMX 生成的
stm32fxx_hal_msp.c
文件和stm32fxx_hal_conf.h
文件。对于不同的外设驱动,通过 STM32CubeMX 工具配置的内容也不一样。开发者可以参考本文档的附录 CubeMX 配置说明章节来了解不同外设的配置方法。
3)修改 Kconfig 文件
打开 board 文件夹下的 Konfig 文件,拷贝 SPI2 的配置项,并重命名 SPI2 为 SPI3。
4)重新配置工程
经过上一步的修改,此时重新打开 ENV 工具,在 menuconfig 中就会出现添加的 SPI3 的配置项。
5)生成工程,检查驱动文件
使用 ENV 重新生成工程并打开,检查原有驱动文件是否支持新添加的驱动(查看是否有新驱动的配置文件,中断函数,DMA配置和中断函数等等),如不支持,需参考现有驱动添加相关的代码。
6)编译下载
检查完工程后,编译下载到开发板,程序会自动开始运行。输入 list_device
命令,可以看到 spi3 总线已经注册到内核,说明驱动已经添加成功。
4. 注意事项
- 部分驱动如果没有适配 BSP 所属的 STM32 系列,请等待 RT-Thread 团队更新。
- 驱动文件对 STM32 系列的支持情况可以查看 STM32系列驱动介绍文档。
- 对于驱动文件或文档说明,有任何建议或者意见,欢迎反馈到 RT_Thread GitHub 网站或 RT-Thread 官方论坛。
5. 附录
5.1 CubeMX配置说明
本小节介绍 stm32 系列的 BSP 是如何利用 CubeMX 工具对 BSP 进行配置的。
就像文档中提到的那样,stm32 系列的 BSP 只利用了 CubeMX 工具生成的 stm32XXxx_hal_conf.h
和 stm32XXxx_hal_msp.c
文件。在 HAL 库中, stm32XXxx_hal_conf.h
文件里提供的宏开关会决定 HAL 库将哪些外设驱动添加到工程中。 而stm32XXxx_hal_msp.c
文件中则存放了在 CubeMX 工具中开启的外设驱动的配置代码。
5.2 外设配置总结
当开发者想要在 BSP 中添加更多驱动时,需要使用 CubeMX 工具来配置这些外设。对于绝大多数驱动的配置,只需要在工具中使能相应的外设即可。但是对于一些复杂的外设,则需要更多的配置内容。下表展示了不同驱动在 CubeMX 工具配置步骤的总结:
序号 | 驱动 | CubeMx 工程中的配置情况(加粗部分为必做步骤) |
---|---|---|
1 | GPIO | 无需任何操作 |
2 | UART | 开启该外设 ,然后配置所需要的引脚(或者使用默认引脚) |
3 | SPI | 开启该外设 ,然后配置所需要的引脚(或者使用默认引脚) |
4 | I2C | 依赖于PIN 驱动,无需任何操作 |
5 | TIMER | 使能 internal Clock 时钟 ,详细内容可参考5.3章节 |
7 | PWM | 首先使能 internal Clock 时钟,然后为 channelx 选项选择PWM Generation CHx, 最后配置所需要的引脚(或者使用默认引脚) ,详细内容可参考5.3章节 |
8 | ADC | 开启该外设,然后选择使用的通道 ,详细内容可参考5.3章节 |
9 | RTC | 开启该外设,然后在时钟树状图里将 RTC 选择为 LSE 时钟 |
10 | Watchdog | 开启该外设 |
11 | EMAC | 配置 ETH 外设的工作模式(一般为 RMII 模式) |
12 | SDRAM | 需要根据板载的 SDRAM 型号配置片选脚,地址线,数据线等 |
13 | SDIO | 开启该外设,配置引脚(或者使用默认引脚),SDIO会改变时钟结构,故需重新配置时钟并修改board.c |
5.3 复杂外设配置说明
本章节着重介绍配置步骤较为复杂的驱动。
5.3.1 TIMER 外设驱动添加说明
- 打开 STM32CubeMX 工程,设置 timer 在 Cube 里的选项,如下图所示:
- 打开 stm32/stm32f429-atk-apollo/board/Kconfig ,添加 Kconfig 选项。选中自己添加的选项后,生成一遍工程,如下图所示:
- 打开工程进行编译,工程会提示 TIM11_CONFIG 未定义。 可以在 stm32/libraries/HAL_Drivers/config/f4/tim_config.h 中进行定义,如下图所示:
5.3.2 PWM 外设驱动添加说明
- 打开 STM32CubeMX 工程,设置 PWM 在 Cube 里的选项,如下图所示:
- 打开 stm32/stm32f429-atk-apollo/board/Kconfig ,添加 Kconfig 选项。选中自己添加的选项后,生成一遍工程,如下图所示:
- 打开工程进行编译,工程会提示 PWM2_CONFIG 未定义。 可以在 stm32/libraries/HAL_Drivers/config/f4/pwm_config.h 中进行定义,如下图所示:
5.3.3 ADC 外设驱动添加说明
- 打开 STM32CubeMX 工程,设置 ADC 在 Cube 里的选项,如下图所示:
- 打开 stm32/stm32f429-atk-apollo/board/Kconfig ,添加 Kconfig 选项。选中自己添加的选项后,生成一遍工程,如下图所示:
- 打开工程进行编译,工程会提示 ADC1_CONFIG 未定义。 可以在 stm32/libraries/HAL_Drivers/config/f4/adc_config.h 中进行定义,如下图所示:
5.3.4 编码器外设驱动添加说明
- 打开 STM32CubeMX 工程,设置 TIMER 在 Cube 里的选项,如下图所示:
- 打开 stm32/stm32f407-atk-explorer/board/Kconfig ,添加 Kconfig 选项。选中自己添加的选项后,生成一遍工程,如下图所示:
- 打开工程进行编译,工程会提示 PULSE_ENCODER4_CONFIG 未定义。 可以在 stm32/libraries/HAL_Drivers/config/f4/pulse_encoder_config.h 中进行定义,如下图所示:
rtthread学习之(2)——STM32 系列外设驱动添加指南相关推荐
- 适合学习的基于stm32系列--按键控制心形红绿流水灯的转换
一.硬件设计 1,按键电路 在这次设计中,用到的按键只有WK-UP和KEY2两个按键,按下WK-UP按键红灯闪烁,按下KEY2按键绿灯闪烁. WK_UP电路采用的是下拉模式,常态下是低电平,当按键按下 ...
- STM32的外设介绍
片上资源又叫做外设,英文是peripheral,下面这个表里就是STM32F1系列的外设资源. 我们主要学习的就是STM32的外设,通过程序配置外设来完成我们想要的功能.在这个表中,前两个深颜色的是位 ...
- RT-Thread STM32系列BSP外设驱动使用教程
BSP 外设驱动使用教程 简介 本文档是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的.通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能. ...
- 基于STM32的RTOS教程——RT-Thread学习教程
下面所有资料都是转载整理于:https://www.rt-thread.org/document/site/#/ 文章目录 新手指导 版本简介 学习路线 入门学习 无RTOS经验 模拟运行 快速上手 ...
- 【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)
我选用的单片机型号为:STM32F103系列 74LS595是一个串转并行输出的芯片,它能为单片机节省很多的IO口,应用场景广泛. 现要求三个数码管动态显示,常规设计都是并行实现,需要8个IO数据口, ...
- STM32系列——驱动0.96寸oled显示屏
一OLED介绍 使用了0.96寸的oled显示屏(SSD1306驱动),128*64像素,查阅店主给的相关资料后知道,这种屏幕有串行通信和并行通信方式,串行通信可以选择IIC(只需要2个管脚SCL.S ...
- 外设驱动库开发笔记47:ADS111x系列ADC驱动
关于ADC我们已经讨论过不少了,但在不同的应用需求下,我们会选择不同的原件.在这里我们将讨论ADS111x系列ADC驱动的设计与实现. 1.功能概述 ADS1113. ADS1114 和 AD ...
- 这款开源的STM32外设驱动库,可以直接拿来用!
软件一行,经常需要用到很多重复的代码,我们有必要花一些时间整理一些常用的.通用的代码,等到用到的时候就可以直接拿来用了.如果没有精力自己去整理,也可以用一些网上比较成熟的代码. 比如本次介绍的基于ST ...
- 关于rt-thread的外设驱动原理(例子spi)
一:有关SPI rt中用户需要添加spi的注册和初始化文件如:drv_spi,里面需要做的是 static struct rt_spi_ops gd32_spi_ops = { configure, ...
- ESP32学习笔记( VSCode + ESP-IDF环境) 3 ——GPIO相关的简单外设驱动
1.如何在VSCode和ESP-IDF的环境下创建工程 说实话,这是我用ESP-IDF在VSCode环境下最不喜欢的事情,在一顿CSDN和百度之后,很多大佬博主都推荐使用VSCode,通过官方示例来进 ...
最新文章
- 为什么异步Python比同步Python快?
- mysql的安全管理工具_最安全mysql管理工具
- Matplotlib实例教程(十四)误差条形图
- SAP CRM WebClient UI上分销渠道点击展开按钮后执行了哪些逻辑
- python引入redis_使用python向Redis批量导入数据
- Java核心技术- Java内存分配原理
- python高效编程15个利器_15个Python库,让你学习编程更轻松!
- Unity 双击Asset后回调的实现
- java string 日期格式_Java 日期格式和String 转换
- laravel 效率与java_让你的Laravel 应用运行速度飞起来!(利用PHP OPcache)
- ASP.NET 2.0中的页面输出缓存
- 论中国智慧城市的发展前景
- 组台式计算机配置清单整套,组装台式电脑配置清单有哪些 台式电脑什么配置好...
- 【Ubuntu】基于 Ubuntu 搭建 Discuz 论坛
- SQLserver 报错RegCreateKeyEx() 返回了错误 5,“拒绝访问。” (.Net SqlClient Data Provider)错误号: 22002 严重性: 16 状态: 1
- 草履虫纳米机器人_纳米机器人的研究进展如何?
- HTML+CSS+Javascript简易记账本(localStorage)
- 大学综合测评中,使用VBA代码自动完成EXCEL成绩表
- C++基础——向上取整/向下取整
- nginx:Url重写
热门文章
- 大数据技术之Hadoop(入门)
- 内与外的困惑:找出System进程占用100%CPU的元凶
- 关于win10 system进程 占用CPU过高的问题?
- Win10系统磁盘分区图文教程
- excel 度分秒转度
- 各大云服务厂商 轻量应用服务器 性能评测对比,阿里云、腾讯云、华为云、Ucloud
- 浏览器刷新和关闭时显示提示信息
- 微信小程序云数据库的分页提取,解决提取大量数据的耗时问题
- onenote登录显示服务器问题,onenote启动不了怎么回事 onenote为什么登录显示无法连接...
- python使用 urllib.unquote乱码的原因