RT-Thread : STM32 系列外設驅動添加指南

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. 注意事項

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 中進行定義,如下圖所示:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章