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 外设驱动添加说明

  1. 打开 STM32CubeMX 工程,设置 timer 在 Cube 里的选项,如下图所示:

  1. 打开 stm32/stm32f429-atk-apollo/board/Kconfig ,添加 Kconfig 选项。选中自己添加的选项后,生成一遍工程,如下图所示:

  1. 打开工程进行编译,工程会提示 TIM11_CONFIG 未定义。 可以在 stm32/libraries/HAL_Drivers/config/f4/tim_config.h 中进行定义,如下图所示:

 

5.3.2 PWM 外设驱动添加说明

  1. 打开 STM32CubeMX 工程,设置 PWM 在 Cube 里的选项,如下图所示:

  1. 打开 stm32/stm32f429-atk-apollo/board/Kconfig ,添加 Kconfig 选项。选中自己添加的选项后,生成一遍工程,如下图所示:

  1. 打开工程进行编译,工程会提示 PWM2_CONFIG 未定义。 可以在 stm32/libraries/HAL_Drivers/config/f4/pwm_config.h 中进行定义,如下图所示:

 

5.3.3 ADC 外设驱动添加说明

  1. 打开 STM32CubeMX 工程,设置 ADC 在 Cube 里的选项,如下图所示:

  1. 打开 stm32/stm32f429-atk-apollo/board/Kconfig ,添加 Kconfig 选项。选中自己添加的选项后,生成一遍工程,如下图所示:

  1. 打开工程进行编译,工程会提示 ADC1_CONFIG 未定义。 可以在 stm32/libraries/HAL_Drivers/config/f4/adc_config.h 中进行定义,如下图所示:

 

5.3.4 编码器外设驱动添加说明

  1. 打开 STM32CubeMX 工程,设置 TIMER 在 Cube 里的选项,如下图所示:

  1. 打开 stm32/stm32f407-atk-explorer/board/Kconfig ,添加 Kconfig 选项。选中自己添加的选项后,生成一遍工程,如下图所示:

  1. 打开工程进行编译,工程会提示 PULSE_ENCODER4_CONFIG 未定义。 可以在 stm32/libraries/HAL_Drivers/config/f4/pulse_encoder_config.h 中进行定义,如下图所示:

rtthread学习之(2)——STM32 系列外设驱动添加指南相关推荐

  1. 适合学习的基于stm32系列--按键控制心形红绿流水灯的转换

    一.硬件设计 1,按键电路 在这次设计中,用到的按键只有WK-UP和KEY2两个按键,按下WK-UP按键红灯闪烁,按下KEY2按键绿灯闪烁. WK_UP电路采用的是下拉模式,常态下是低电平,当按键按下 ...

  2. STM32的外设介绍

    片上资源又叫做外设,英文是peripheral,下面这个表里就是STM32F1系列的外设资源. 我们主要学习的就是STM32的外设,通过程序配置外设来完成我们想要的功能.在这个表中,前两个深颜色的是位 ...

  3. RT-Thread STM32系列BSP外设驱动使用教程

    BSP 外设驱动使用教程 简介 本文档是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的.通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能. ...

  4. 基于STM32的RTOS教程——RT-Thread学习教程

    下面所有资料都是转载整理于:https://www.rt-thread.org/document/site/#/ 文章目录 新手指导 版本简介 学习路线 入门学习 无RTOS经验 模拟运行 快速上手 ...

  5. 【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)

    我选用的单片机型号为:STM32F103系列 74LS595是一个串转并行输出的芯片,它能为单片机节省很多的IO口,应用场景广泛. 现要求三个数码管动态显示,常规设计都是并行实现,需要8个IO数据口, ...

  6. STM32系列——驱动0.96寸oled显示屏

    一OLED介绍 使用了0.96寸的oled显示屏(SSD1306驱动),128*64像素,查阅店主给的相关资料后知道,这种屏幕有串行通信和并行通信方式,串行通信可以选择IIC(只需要2个管脚SCL.S ...

  7. 外设驱动库开发笔记47:ADS111x系列ADC驱动

      关于ADC我们已经讨论过不少了,但在不同的应用需求下,我们会选择不同的原件.在这里我们将讨论ADS111x系列ADC驱动的设计与实现. 1.功能概述   ADS1113. ADS1114 和 AD ...

  8. 这款开源的STM32外设驱动库,可以直接拿来用!

    软件一行,经常需要用到很多重复的代码,我们有必要花一些时间整理一些常用的.通用的代码,等到用到的时候就可以直接拿来用了.如果没有精力自己去整理,也可以用一些网上比较成熟的代码. 比如本次介绍的基于ST ...

  9. 关于rt-thread的外设驱动原理(例子spi)

    一:有关SPI rt中用户需要添加spi的注册和初始化文件如:drv_spi,里面需要做的是 static struct rt_spi_ops gd32_spi_ops = { configure, ...

  10. ESP32学习笔记( VSCode + ESP-IDF环境) 3 ——GPIO相关的简单外设驱动

    1.如何在VSCode和ESP-IDF的环境下创建工程 说实话,这是我用ESP-IDF在VSCode环境下最不喜欢的事情,在一顿CSDN和百度之后,很多大佬博主都推荐使用VSCode,通过官方示例来进 ...

最新文章

  1. 为什么异步Python比同步Python快?
  2. mysql的安全管理工具_最安全mysql管理工具
  3. Matplotlib实例教程(十四)误差条形图
  4. SAP CRM WebClient UI上分销渠道点击展开按钮后执行了哪些逻辑
  5. python引入redis_使用python向Redis批量导入数据
  6. Java核心技术- Java内存分配原理
  7. python高效编程15个利器_15个Python库,让你学习编程更轻松!
  8. Unity 双击Asset后回调的实现
  9. java string 日期格式_Java 日期格式和String 转换
  10. laravel 效率与java_让你的Laravel 应用运行速度飞起来!(利用PHP OPcache)
  11. ASP.NET 2.0中的页面输出缓存
  12. 论中国智慧城市的发展前景
  13. 组台式计算机配置清单整套,组装台式电脑配置清单有哪些 台式电脑什么配置好...
  14. 【Ubuntu】基于 Ubuntu 搭建 Discuz 论坛
  15. SQLserver 报错RegCreateKeyEx() 返回了错误 5,“拒绝访问。” (.Net SqlClient Data Provider)错误号: 22002 严重性: 16 状态: 1
  16. 草履虫纳米机器人_纳米机器人的研究进展如何?
  17. HTML+CSS+Javascript简易记账本(localStorage)
  18. 大学综合测评中,使用VBA代码自动完成EXCEL成绩表
  19. C++基础——向上取整/向下取整
  20. nginx:Url重写

热门文章

  1. 大数据技术之Hadoop(入门)
  2. 内与外的困惑:找出System进程占用100%CPU的元凶
  3. 关于win10 system进程 占用CPU过高的问题?
  4. Win10系统磁盘分区图文教程
  5. excel 度分秒转度
  6. 各大云服务厂商 轻量应用服务器 性能评测对比,阿里云、腾讯云、华为云、Ucloud
  7. 浏览器刷新和关闭时显示提示信息
  8. 微信小程序云数据库的分页提取,解决提取大量数据的耗时问题
  9. onenote登录显示服务器问题,onenote启动不了怎么回事 onenote为什么登录显示无法连接...
  10. python使用 urllib.unquote乱码的原因