目录

参考链接

前言

一、外设驱动

1、片上外设

2、板载外设

二、外设驱动添加

1、配置CubeMX工程

2、修改Kconfig

​3、添加ports文件,修改SConscript

三、外设配置总结


参考链接

STM32 系列外设驱动添加指南

前言

  1. 此次制作的BSP使用的板卡我司自己开发的板卡,不方便放上来,但是是仿的正点原子阿波罗开发板,外设都差不多,单片机型号为429IGT6,大家看的时候可以参考阿波罗开发板硬件
  2. 整个驱动篇的源码可以私聊我或是从这里下载

一、外设驱动

对一个 BSP 而言,有如下三类驱动:

  • 板载外设驱动:指 MCU 之外,开发板上外设,例如 TF 卡、以太网和 LCD 等
  • 片上外设驱动:指 MCU 芯片上的外设,例如硬件定时器、ADC 和看门狗等
  • 扩展模块驱动:指可以通过扩展接口或者杜邦线连接的开发板的模块,例如 ESP8266 模块

对于要添加的板卡,有如下外设:

1、片上外设

序号

驱动

外设

1

GPIO

DO1~DO5、DI1~DI2

2

UART

3

SPI

SPI1(扩展使用)、SPI2(串口扩展芯片使用)、SPI4(扩展使用)、SPI5(W25Q使用,SPI5_SCK不是硬件SPI引脚,需要模拟,所以CubeMX没有开启)

4

soft I2C

I2C1(扩展使用)、I2C2(DS1340)、I2C3(扩展使用)

5

TIMER

TIM11、TIM13、TIM14

6

ADC

ADC1_IN8(VI0)、ADC1_IN9(VI1)

7

RTC

设置和读取时间

8

WDT

看门狗驱动

2、板载外设

序号

驱动

简介

1

SDIO

通过 SDIO 读写TF卡

2

ETH PHY

以太网

3

USB PHY

USB

4

LCD

显示屏

二、外设驱动添加

添加步骤:

1、配置CubeMX工程

打开 \board\CubeMX_Config 目录下的CubeMX工程,按照原理图配置对应外设的引脚,完成外设时钟使能和管脚配置的工作并生成工程。外设初始化,中断配置,DMA配置等等则由 RT-Thread 提供的驱动文件来完成。也就是说,虽然 STM32CubeMX 生成了多个文件用来初始化外设,但 RT-Thread 只使用了 STM32CubeMX 生成的 stm32fxx_hal_msp.c 文件(存放了在 CubeMX 工具中开启的外设驱动的配置代码)和 stm32fxx_hal_conf.h文件(提供的宏开关会决定 HAL 库将哪些外设驱动添加到工程中)。最后配置完成的外设有:

2、修改Kconfig

修改\board\Kconfig文件,这样就可以通过menuconfig来选择需要使用的外设了

menu "Hardware Drivers Config"config SOC_STM32F429IGboolselect SOC_SERIES_STM32F4select RT_USING_COMPONENTS_INITselect RT_USING_USER_MAINdefault ymenu "Onboard Peripheral Drivers"config BSP_USING_COM1bool "Enable USART1"select BSP_USING_UARTselect BSP_USING_UART1default nconfig BSP_USING_COM6bool "Enable USART6"select BSP_USING_UARTselect BSP_USING_UART6default nconfig BSP_USING_COM7bool "Enable USART7"select BSP_USING_UARTselect BSP_USING_UART7default yconfig BSP_USING_SDRAMbool "Enable SDRAM"select BSP_USING_FMCdefault nconfig BSP_USING_SPI_FLASHbool "Enable SOFT-SPI FLASH (W25Q64)"select BSP_USING_SOFT_SPIselect RT_USING_SFUDselect RT_SFUD_USING_SFDPdefault nconfig PHY_USING_LAN8720Aboolconfig BSP_USING_ETHbool "Enable Ethernet (ETH_RST is PH3)"select RT_USING_LWIPselect PHY_USING_LAN8720Adefault nconfig BSP_USING_SDCARDbool "Enable SDCARD (sdio)"select BSP_USING_SDIOselect RT_USING_DFSselect RT_USING_DFS_ELMFATdefault nconfig BSP_USING_LCDbool "Enable RGB-LCD"select BSP_USING_LTDCselect BSP_USING_SDRAMdefault nconfig BSP_USING_TOUCHbool "Enable TOUCH Driver(TSC2046)"default nendmenumenu "On-chip Peripheral Drivers"config BSP_USING_GPIObool "Enable GPIO"select RT_USING_PINdefault ymenuconfig BSP_USING_UARTbool "Enable UART"default yselect RT_USING_SERIALif BSP_USING_UARTconfig BSP_USING_UART1bool "Enable UART1"default nconfig BSP_UART1_RX_USING_DMAbool "Enable UART1 RX DMA"depends on BSP_USING_UART1 && RT_SERIAL_USING_DMAdefault nconfig BSP_USING_UART6bool "Enable UART6"default nconfig BSP_UART6_RX_USING_DMAbool "Enable UART6 RX DMA"depends on BSP_USING_UART6 && RT_SERIAL_USING_DMAdefault nconfig BSP_USING_UART7bool "Enable UART7"default yconfig BSP_UART7_RX_USING_DMAbool "Enable UART7 RX DMA"depends on BSP_USING_UART7 && RT_SERIAL_USING_DMAdefault n  endifconfig BSP_USING_ON_CHIP_FLASHbool "Enable on-chip FLASH"default nmenuconfig BSP_USING_SOFT_SPIbool "Enable SOFT SPI BUS"default nselect RT_USING_SOFT_SPIif BSP_USING_SOFT_SPIconfig BSP_USING_SOFT_SPI1bool "Enable SOFT SPI1:CS(PG10) SCK(PG12)  MISO(PF8) MOSI(PF9)"default nendifmenuconfig BSP_USING_SPIbool "Enable SPI BUS"default nselect RT_USING_SPIif BSP_USING_SPIconfig BSP_USING_SPI1bool "Enable SPI1 BUS(extended use!!!)"default n        config BSP_SPI1_TX_USING_DMAbool "Enable SPI1 TX DMA"depends on BSP_USING_SPI1default nconfig BSP_SPI1_RX_USING_DMAbool "Enable SPI1 RX DMA"depends on BSP_USING_SPI1select BSP_SPI1_TX_USING_DMAdefault n  config BSP_USING_SPI2bool "Enable SPI2 BUS(use to extend uart!!!)"default n        config BSP_SPI2_TX_USING_DMAbool "Enable SPI2 TX DMA"depends on BSP_USING_SPI2default nconfig BSP_SPI2_RX_USING_DMAbool "Enable SPI2 RX DMA"depends on BSP_USING_SPI2select BSP_SPI2_TX_USING_DMAdefault n  config BSP_USING_SPI4bool "Enable SPI4 BUS(extended use!!!)"default n        config BSP_SPI4_TX_USING_DMAbool "Enable SPI4 TX DMA"depends on BSP_USING_SPI4default nconfig BSP_SPI4_RX_USING_DMAbool "Enable SPI4 RX DMA"depends on BSP_USING_SPI4select BSP_SPI4_TX_USING_DMAdefault nendif      menuconfig BSP_USING_I2C1bool "Enable I2C1 BUS (software simulation,extended use!!!)"default nselect RT_USING_I2Cselect RT_USING_I2C_BITOPSselect RT_USING_PINif BSP_USING_I2C1comment "Notice: PB8(SCL) --> 167; PB9(SDA) --> 168"config BSP_I2C1_SCL_PINint "I2C1 scl pin number"range 1 176default 167config BSP_I2C1_SDA_PINint "I2C1 sda pin number"range 1 176default 168endifmenuconfig BSP_USING_I2C2bool "Enable I2C2 BUS (software simulation,use to RTC(DS1340))"default nselect RT_USING_I2Cselect RT_USING_I2C_BITOPSselect RT_USING_PINif BSP_USING_I2C2comment "Notice: PH4(SCL) --> 45; PH5(SDA) --> 46"config BSP_I2C2_SCL_PINint "I2C2 scl pin number"range 1 176default 45config BSP_I2C2_SDA_PINint "I2C2 sda pin number"range 1 176default 46endifmenuconfig BSP_USING_I2C3bool "Enable I2C3 BUS (software simulation,extended use!!!)"default nselect RT_USING_I2Cselect RT_USING_I2C_BITOPSselect RT_USING_PINif BSP_USING_I2C3comment "Notice: PA8(SCL) --> 119; PH8(SDA)--> 85"config BSP_I2C3_SCL_PINint "I2C3 scl pin number"range 1 176default 119config BSP_I2C3_SDA_PINint "I2C3 sda pin number"range 1 176default 85endifmenuconfig BSP_USING_TIMbool "Enable timer"default nselect RT_USING_HWTIMERif BSP_USING_TIMconfig BSP_USING_TIM11bool "Enable TIM11"default nconfig BSP_USING_TIM13bool "Enable TIM13"default nconfig BSP_USING_TIM14bool "Enable TIM14"default nendifmenuconfig BSP_USING_ADCbool "Enable ADC"default nselect RT_USING_ADCif BSP_USING_ADCconfig BSP_USING_ADC1bool "Enable ADC1"default nendifmenuconfig BSP_USING_ONCHIP_RTCbool "Enable RTC"select RT_USING_RTCselect RT_USING_LIBCdefault nif BSP_USING_ONCHIP_RTCchoiceprompt "Select clock source"default BSP_RTC_USING_LSEconfig BSP_RTC_USING_LSEbool "RTC USING LSE"config BSP_RTC_USING_LSIbool "RTC USING LSI"endchoiceendifconfig BSP_USING_WDTbool "Enable Watchdog Timer"select RT_USING_WDTdefault nmenuconfig BSP_USING_USBHbool "Enable USB Host"select RT_USING_USB_HOSTdefault nif BSP_USING_USBHmenuconfig RT_USBH_MSTORAGEbool "Enable Udisk Drivers"default nif RT_USBH_MSTORAGEconfig UDISK_MOUNTPOINTstring "Udisk mount dir"default "/"endifendifconfig BSP_USING_SDIObool "Enable SDIO"select RT_USING_SDIOselect RT_USING_DFSdefault nconfig BSP_USING_FMCbooldefault nconfig BSP_USING_LTDCbooldefault nsource "./libraries/HAL_Drivers/Kconfig"endmenumenu "Board extended module Drivers"menuconfig RT_STEMWINbool "Enable STemWin"default nif RT_STEMWINconfig RT_STEMWIN_DEMObool "Enable STemWin Demo"default nendifmenuconfig RT_TOUCHGFXbool "Enable TouchGFX"default nendmenuendmenu

3、添加ports文件,修改SConscript

使用CubeMX配置完工程后,只是完成了外设时钟使能管脚配置外设初始化,中断配置,DMA配置等等则由 RT-Thread 提供的驱动文件(\libraries\HAL_Drivers目录下)来完成的,这些驱动配置有的需要根据使用情况修改配置参数,这些配置参数文件就存放在\board\ports文件夹下

添加完后,还需要根据menuconfig开启的外设来选择需要包含的配置文件,也就是还需要修改\board\SConscript 构建脚本,这样在编译的时候才会将相应的文件加入工程进行编译

import os
import rtconfig
from building import *Import('SDK_LIB')cwd = GetCurrentDir()# add general drivers
src = Split('''
board.c
CubeMX_Config/Src/stm32f4xx_hal_msp.c
''')if GetDepend(['BSP_USING_ETH']):src += Glob('ports/phy_reset.c')if GetDepend(['BSP_USING_SPI_FLASH']):src += Glob('ports/spi_flash_init.c')if GetDepend(['BSP_USING_SDCARD']):src += Glob('ports/sdcard_port.c')if GetDepend(['BSP_USING_AUDIO']):src += Glob('ports/audio/drv_wm8978.c')src += Glob('ports/audio/drv_sound.c')if GetDepend(['BSP_USING_AUDIO_RECORD']):src += Glob('ports/audio/drv_mic.c')    path =  [cwd]
path += [cwd + '/CubeMX_Config/Inc']
path += [cwd + '/ports']if GetDepend(['BSP_USING_AUDIO']):path += [cwd + '/ports/audio']startup_path_prefix = SDK_LIBif rtconfig.CROSS_TOOL == 'gcc':src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f429xx.s']
elif rtconfig.CROSS_TOOL == 'keil':src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f429xx.s']
elif rtconfig.CROSS_TOOL == 'iar':src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/iar/startup_stm32f429xx.s']CPPDEFINES = ['STM32F429xx']
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)Return('group')

三、外设配置总结

想要在 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

rt-thread驱动篇(02)---STM32F429板卡外设驱动添加相关推荐

  1. python实现sht驱动_【技术】外设驱动库开发笔记9:SHT1x系列温湿度传感器驱动

    在我们的产品中,经常需要检测温湿度数据.有很多检测温湿度的方法和模块,其中SHT1x系列温湿度传感器就是一种成本较低使用方便的温湿度检测模块.下面我们就来说一说如何实现SHT1x系列温湿度传感器的驱动 ...

  2. rt-thread驱动篇(08)---STM32F429单片机NAND FLASH驱动

    目录 参考资料 一.NAND FLASH 1.1.特性 1.2.存储单元结构 1.3.NAND FLASH寻址 1.4.坏块管理与磨损均衡 1.5.ECC校验 二.uffs 1.uffs配置相关宏 参 ...

  3. 【linux驱动】gpio外设驱动

      本篇文章为gpio外设驱动,使用内核的gpio驱动框架来操作soc的gpio外设,首先介绍所有外设引脚配置都需要的pinctrl,再介绍本篇的重点-gpio外设驱动,最后给出三个标准的gpio外设 ...

  4. xpt 2046的触摸屏 rt thread设备驱动框架

    1 基于rtt 开发触摸屏驱动 准备使用rtt 框架 , 驱动xpt 2046的触摸屏, 翻阅大量资料发现, 大部分文章强调的是时序图, 而且很多代码要么直接操作寄存器, 要么是io 口模拟, 只能用 ...

  5. 2440 6.0BSP 移植过程之显示驱动篇

    2440 6.0BSP 移植过程之显示驱动篇 //--------------------------------------------------------------------------- ...

  6. Linux 设备驱动篇之I2c设备驱动

    ******************************************************************************************** 装载声明:希望 ...

  7. Linux设备驱动篇——[I2C设备驱动-1]

    Linux 设备驱动篇之I2c设备驱动 fulinux 一.I2C驱动体系 虽然I2C硬件体系结构和协议都很容易理解,但是Linux I2C驱动体系结构却有相当的复杂度,它主要由3部分组成,即I2C设 ...

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

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

  9. HwBinder驱动篇-Android10.0 HwBinder通信原理(十)

    摘要:本节主要来讲解Android10.0 HwBinder驱动的流程 阅读本文大约需要花费24分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设 ...

  10. i2c--ioctl--主机控制器驱动(i2c_adapter)--外设驱动(i2c_driver)

    updating... i2c驱动目录 [root@localhost i2c]# pwd /opt/FriendlyArm/mini2440/linux-2.6.32.2/drivers/i2c [ ...

最新文章

  1. python对文件的读写正确操作方式
  2. flask中jinjia2模板引擎详解3
  3. P3358 最长k可重区间集问题(网络流:串联思想)
  4. SCCM2012系列之二,SCCM2012部署前的Active Directory准备
  5. Windows系统appium移动端自动化真机环境搭建
  6. VSCode下Pytorch无法自动补全的问题
  7. 智能家居形态逐步演进 机会与挑战并存
  8. deepTools对ChIP-seq数据可视化
  9. 深圳大学移动互联网应用期末大作业——垃圾分类app
  10. 微型计算机原理与接口技术 考题,微机原理与接口技术试题答案
  11. 【环境搭建】在Ubuntu16.04上搭建Nginx-rtmp流媒体服务器
  12. 阻抗分析仪(LCR表)与矢量网络分析仪
  13. 步进电机、伺服电机、舵机的原理和区别
  14. sip php 来电,php - 如何在Twilio上传递原来的来电显示? (Sip域语音URL配置) - SO中文参考 - www.soinside.com...
  15. 偷得浮生半日闲:手写数字的识别
  16. 解决Outlook打不开邮件里的链接的方法
  17. 几个招聘网站,智联的最垃圾
  18. 微信小程序中的页面文件和组件
  19. 【转】京东一元抢宝系统的数据库架构优化
  20. 统考英语和计算机可以插u盘吗,统考大学英语B考试技巧 精品

热门文章

  1. [system] Map key not configured
  2. 设定目标需要注意的事项
  3. Simhash算法介绍和应用内容
  4. matlab命令打开Word文档
  5. 网易云易盾发布多国家多语种内容安全服务,助力中国互联网出海
  6. 图片像素、大小、分辨率的关系
  7. 微信公众号跳转小程序失败 new WxMpTemplateMessage.MiniProgram
  8. TCP/IP协议簇中三个常见的传输层协议
  9. 【ZeyFra个人随记02】23考研,重新出发,决不投降,真正的为自己脚踏实地认真努力拼一次吧
  10. LOTO示波器 实测 开环增益频响曲线/电源环路响应稳定性