https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/docs/STM32%E7%B3%BB%E5%88%97%E5%A4%96%E8%AE%BE%E9%A9%B1%E5%8A%A8%E6%B7%BB%E5%8A%A0%E6%8C%87%E5%8D%97.md

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

  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 中进行定义,如下图所示:

RT-Thread : STM32 系列外设驱动添加指南相关推荐

  1. 基于GD32F103C8T6添加RT Thread nano设备框架并添加串口设备(以控制台console( uart0 )为例)

    最近没事琢磨了一下使用设备框架的问题.因为将串口注册到设备框架可以应用十分丰富的软件包. 于是就整理了一下手上的工程,重新将工程梳理了一遍. 像这样是十分清爽了,其中RTOS是操作系统源代码 并且学习 ...

  2. 首创STM32 USB主机驱动4G rndis设备

    1.4G模块使用技术现状与难题 4G模块支持的对外通信接口有串口和USB接口,串口一般使用AT指令的方式,这个在MCU类产品上面使用的很多,USB接口主用于在连接APU应用处理器上面,由LINUX操作 ...

  3. 正点原子delay函数移植到rt thread操作系统(HAL库)

    正点原子教程中涉及到的操作系统只涉及了UCOS的教程,其中例程的system文件夹中的delay.c函数只是适配了UCOS. 下面将delay.c函数移植到rt thread中,使用的bsp是rt t ...

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

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

  5. 战舰V3适配oneos系列02:添加串口驱动

    战舰V3适配oneos系列02:添加串口驱动 参考: https://os.iot.10086.cn/v2/doc/detailPage/documentHtml?idss=1574615317503 ...

  6. RK系列开发板音频驱动适配指南(二)

    背景: 上一篇文章RK系列开发板音频驱动适配指南-DAI模块适配中已经阐述音频驱动适配的DAI模块适配步骤以及核心代码的展示,本次主要介绍音频驱动适配中的DMA模块适配. RK系列开发板 DMA模块适 ...

  7. 战舰V3适配oneos系列03:添加SD卡驱动及文件系统

    战舰V3系列03:添加SD卡驱动及文件系统 本系列以 oneos2.3.0 提供的 STM32F103ZE 模板为基础,将 oneos 在战舰 V3 上运行起来,并逐步适配相关外设,计划周更 本系列相 ...

  8. rt thread系统下添加wiznet软件包后,不插网线CPU利用率100%问题

    rt thread系统下添加wiznet软件包后如果不插网线的话其他任务运行很卡,使用ps命令发现优先级低的任务很多都超时了 rt thread线程错误码 添加了一个可以查看CPU利用率的软件包CPU ...

  9. Simplicity Studio V5 建立一个空工程后如何添加外设驱动

    默认生成工程自带的驱动就这么多. 这些都可以根据自己需求添加.下面我们添加i2c,IADC,LDMA三个. 这里多出了三个文件:em_i2c.c.em_iadc.c.em_ldma.c,这就是自己添加 ...

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

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

最新文章

  1. Yarn基本架构和工作机制
  2. 数独基本规则_数独解题技巧总结
  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(19)-权限管理系统-用户登录
  4. ionic ui框架及creator使用帮助
  5. spinner的理解
  6. Spring总结四:IOC和DI 注解方式
  7. Java基础学习总结(95)——Java反射主要用来干什么?
  8. Linux设备树OF API 中OF的含义
  9. Java 关键字super和this的使用及区别
  10. JavaScript全套视频教程
  11. html设为默认打开方式,设置默认浏览器及默认打开方式设置教程
  12. 浅谈面向对象和面向过程
  13. 小码王python_小码王为你解读Python编程课程
  14. Linux开发工具--(编辑器,编译器,调试器)
  15. 重庆大学明月科创班课程记录1.1大一上自然与设计-仿生蝗虫设计(Solidworks)
  16. 吉首大学2019年程序设计竞赛(重现赛) B 干物妹小埋
  17. centos用php上传文件,CentOS下Apache的SELinux权限(上传图片后写入指定文件夹)
  18. spring cloud-使用Hystrix实现单个方法的fallback
  19. taobao 登录功能代码 淘宝
  20. 关于博弈论中的共同知识的一点理解

热门文章

  1. 解决无法从Git官网下载Git安装包的具体方法
  2. 最新:2021年7月全国程序员平均薪资出炉!你还坐得住吗?
  3. 机器学习在社会科学中的应用
  4. 编程语言常见符号合集,赶快收藏。
  5. 轮盘的基础,简单的实现和Toolbar的实现
  6. 图解谷歌浏览器Chrome的Logo_longware_新浪博客
  7. php龙之战争游戏搭建教程,龙之战争1.02正式版下载
  8. 灵魂有香气的女子李筱懿|讲述女性自我成长的重要性
  9. java 微信主动推送消息_java微信主动推送消息,java微信主动推送消息怎么实现?
  10. java 图像锐化_Java中图像锐化操作的方法详解