【STM32F407開發板用戶手冊】第1章   初學STM32F407的準備工作

最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

第1章   初學STM32F407的準備工作

俗話說萬事開頭難,學習一門新的知識,難的往往不是知識本身,而是如何快速上手,需要什麼資料和開發環境。一旦上手後,深入的學習就相對容易些了。

目錄

第1章   初學STM32F407的準備工作

1.1   初學者重要提示

1.2   開發環境說明

1.3   F1和F407系列的區別

1.4   STM32F407開發資源查找

1.4.1      開發文檔

1.4.2      軟件包

1.5   HAL庫介紹

1.6   CMSIS軟件包介紹

1.7   STM32CubeMX開發平臺

1.8   STM32F407調試方法

1.9   STM32F407出現硬件異常的解決辦法

1.10 總結


1.1   初學者重要提示

  1.   關於學習方法問題,可以看附件章節A。
  2.   學會 STM32F407相關資源的獲取方法,做到心中有數,否則心裏老是沒底。
  3.   關於MDK和IAR兩種編譯器,推薦都掌握,以其中一個爲主,另一個爲輔。因爲很多時候我們需要參考的工程代碼不是自己熟悉的編譯器,就會很被動。
  4.   這幾年湧現出好幾款非常棒的調試工具(如Event Recoder,SEGGER RTT),教程的後面章節會爲大家做講解。

 

1.2   開發環境說明

1、 IDE:支持兩種IDE開發環境,MDK和IAR

  •   MDK推薦使用MDK5.26正式版及其以上版本。
  •   IAR固定使用IAR8.3版本,由於IAR向下兼容性稍差,其它版本未做支持。

2、  調試器使用JLINK,CMSIS-DAP,ULINK或者STLINK均可。

3、  配套開發板是安富萊的:STM32-V5開發板,MCU是STM32F407IGT6。

1.3   F1和F407系列的區別

F1和F4系列的區別。

  •   F1採用Crotex M3內核,F407採用Crotex M4內核。
  •   F1最高主頻 72MHz, F407最高主頻168MHz。
  •   F407具有單精度浮點運算單元,F1沒有浮點運算單元。
  •   F407的具備增強的DSP指令集。F407的執行16位DSP指令的時間只有F1的30%~70%。F407執行32位DSP指令的時間只有F1的25%~60%。
  •   F1內部SRAM最大64K字節, F407 SRAM有192K字節(112K+64K+16K)。
  •   F407有備份域SRAM(通過Vbat供電保持數據),F1沒有備份域SRAM。
  •   F407從內部SRAM和外部FMC存儲器執行程序的速度比F1快很多。F1的指令總線I-Bus只接到Flash上,從SRAM和FMC取指令只能通過S-Bus,速度較慢。F407的I-Bus不但連接到Flash上,而且還連接到SRAM和FMC上,從而加快從SRAM或FMC取指令的速度。
  •   F1最大封裝爲144腳,可提供112個GPIO;F407最大封裝有176腳,可提供140個GPIO。
  •   F1的GPIO的內部上下拉電阻配置僅僅針對輸入模式有用,輸出時無效。而F407的GPIO在設置爲輸出模式時,上下拉電阻的配置依然有效。即F407可以配置爲開漏輸出,內部上拉電阻使能,而F1不行。
  •   F407的GPIO最高翻轉速度爲90MHz,F1最大翻轉速度只有18MHz。
  •   F1最多可提供5個UART串口,F407最多可以提供6個UART串口。
  •   F1可提供2個I2C接口,F407可以提供3個I2C接口。
  •   F1和F407都具有3個12位的獨立ADC,F1可提供21個輸入通道,F407可以提供24個輸入通道。F1的ADC最大采樣頻率爲1Msps,2路交替採樣可到2Msps(F1不支持3路交替採樣)。F4的ADC最大采樣頻率爲2.4Msps,3路交替採樣可到7.2Msps。
  •   F1只有12個DMA通道,F407有16個DMA通道。F407的每個DMA通道有4*32位FIFO,F1沒有FIFO。
  •   F1的SPI時鐘最高速度爲 18MHz, F407可以到37.5MHz。
  •   F1沒有獨立的32位定時器(32位需要級聯實現),F407的TIM2和TIM5具有32位上下計數功能。
  •   F1和F407都有2個I2S接口,但是F1的I2S只支持半雙工(同一時刻要麼放音,要麼錄音),而F407的I2S支持全雙工,放音和錄音可以同時進行。
  •   從編程的角度來說,M3和M4幾乎沒有區別。而性能上區別可以看此貼:http://www.armbbs.cn/forum.php?mod=viewthread&tid=21850

 

總的來說,主要有上面這四點不同,其它地方與使用F1,F4系列是相同的。

1.4   STM32F407開發資源查找

學習一款新的芯片,需要大家從官方獲取兩方面的資料,一個是相關的技術文檔,比如參數手冊、數據手冊、應用筆記等;另一個是軟件包,官方在軟件包中提供了外設驅動庫和基於此庫的大量例程。

1.4.1      開發文檔

學習STM32F407主要下載哪些相關手冊呢?主要有以下幾個,這幾個手冊是我們經常要使用到的,不光學習STM32需要這類手冊,學習FPGA、DSP也是這些類型的手冊,熟練查閱和使用這些手冊也是電子工程師必備的知識之一。

  •   參考手冊(Reference Manual)

對芯片每個外設的具體描述和功能介紹,比如我們要查USART,SPI,DMA相關寄存器和功能的介紹就可以使用這個手冊。

  •   數據手冊(Data Sheet)

在我們要畫PCB的時候用到這個手冊的情況比較多,這個手冊上面有關於這個系列芯片的引腳定義、電氣特性、機械封裝、料號定義等信息。

  •   勘誤手冊(Errata Sheet)

描述了芯片某些功能的侷限性,並給出解決辦法。這個手冊也比較重要,有時候我們覺得有些地方調試老是出問題,就需要查找一下,看看是否是硬件bug。

  •   閃存編程手冊(Flash Programming Manual)

芯片的片上Flash操作指南,比如芯片的擦除,編程,閃存讀寫保護,選項字節信息等。

  •   內核編程手冊(Cortex-M Programming Manual)

對內核的系統控制塊的介紹。這個手冊有時候也要用到,比如我們需要了解NVIC和SysTick相關的寄存器,就需要使用這個手冊。這個手冊可以在ARM官方網站下載,也可以到ST官網下載,區別是ARM官網下載的手冊是通用的,而ST的是針對自家芯片做的。有時候在參考手冊上面找不到相關寄存器的信息時,就需要用到這個手冊。

  •   應用筆記(Application Note)

針對不同應用主題的描述性文檔,部分筆記還會有配套的固件例程。應用筆記的重要性不言而喻,很多時候官方對一些應用做出瞭解決方案,都會以應用筆記的形式發佈。

  •   用戶手冊(User Manual)

一般是對某個軟件庫的說明文檔。

  •   Cortex-M3/M4權威指南

這也是非常重要的參考資料,對於有興趣瞭解M3/M4內核的同學,這個資料相當重要,瞭解了內核才能更好的利用M3/M4。論壇下載地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=2161

瞭解了這些手冊的作用以後,我們學習如何在官網上面查找這些文檔。前幾年ST官方升級後,通過頁面超鏈接的方式查找非常不方便,當前推薦直接在官方右上角的方框裏面檢索即可,比如使用的是STM32F407,直接輸入STM32F407檢索:

  •   第1步:進入ST官方地址www.st.com,頁面上側中間編輯框輸入STM32F407檢索。

  •   第2步:檢索後會彈出所有STM32F407的芯片(隨着時間推移,會增加新型號)。

 

  •   第3步:比如我們用的是STM32F407IG,點擊進入第2步截圖中的STM32F407IG選項即可。進入後,所有的相關資源就都在這個頁面下了。

 

數據手冊標識:

 

應用筆記標識:

 

參考手冊標識:

 

編程手冊標識:

 

勘誤手冊標識:

 

基本上大家所需的開發文檔都在這個頁面下了。

1.4.2      軟件包

 通過上面小節整理完畢相關文檔後,就是STM32F407軟件包的下載了。軟件包也比較好找,同樣推薦1.4.1小節的方式。

  •   第1步:進入ST官方地址www.st.com ,頁面上側中間編輯框輸入STM32CubeF4檢索。

 

  •   第2步:檢索後會彈出STM32CubeF4的軟件包選項。

 

  •   第3步:進入STM32CubeF4的頁面地址後,就在頁面的最底端看到這個軟件包了(隨着時間推移,版本會不斷更新)。

 

  •   第4步:點擊按鈕“Get Software”後,彈出如下界面

 

點擊ACCEPT進入下面界面:

 

點擊Login/Register

 

通過上面四步就獲取了STM32F407的軟件包。軟件包的目錄結構如下:

 

1.5   HAL庫介紹

HAL庫就包含在大家下載的STM32CubeF4軟件包裏面。軟件包的框圖如下:

 

HAL庫全稱Hardware Abstraction Layer,即硬件抽象層,其實就是STM32F407的外設驅動包。代碼文件位於路徑:\Drivers\STM32F4xx_HAL_Driver。如下是部分截圖:

單從人性化角度,這些外設驅動寫的還是比較用心的,特別是每個C文件開頭的使用說明。比如文件stm32f4xx_hal_gpio.c開頭的說明:

  ==============================================================================
                    ##### GPIO Peripheral features #####
  ==============================================================================
  [..] 
  Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each
  port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software
  in several modes:
  (+) Input mode 
  (+) Analog mode
  (+) Output mode
  (+) Alternate function mode
  (+) External interrupt/event lines

  [..]  
  During and just after reset, the alternate functions and external interrupt  
  lines are not active and the I/O ports are configured in input floating mode.
  
  [..]   
  All GPIO pins have weak internal pull-up and pull-down resistors, which can be 
  activated or not.

  [..]
  In Output or Alternate mode, each IO can be configured on open-drain or push-pull
  type and the IO speed can be selected depending on the VDD value.

  [..]  
  All ports have external interrupt/event capability. To use external interrupt 
  lines, the port must be configured in input mode. All available GPIO pins are 
  connected to the 16 external interrupt/event lines from EXTI0 to EXTI15.
  
  [..]
  The external interrupt/event controller consists of up to 23 edge detectors 
  (16 lines are connected to GPIO) for generating event/interrupt requests (each 
  input line can be independently configured to select the type (interrupt or event) 
  and the corresponding trigger event (rising or falling or both). Each line can 
  also be masked independently. 

                     ##### How to use this driver #####
  ==============================================================================  
  [..]
    (#) Enable the GPIO AHB clock using the following function: __HAL_RCC_GPIOx_CLK_ENABLE(). 

    (#) Configure the GPIO pin(s) using HAL_GPIO_Init().
        (++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure
        (++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef 
             structure.
        (++) In case of Output or alternate function mode selection: the speed is 
             configured through "Speed" member from GPIO_InitTypeDef structure.
        (++) In alternate mode is selection, the alternate function connected to the IO
             is configured through "Alternate" member from GPIO_InitTypeDef structure.
        (++) Analog mode is required when a pin is to be used as ADC channel 
             or DAC output.
        (++) In case of external interrupt/event selection the "Mode" member from 
             GPIO_InitTypeDef structure select the type (interrupt or event) and 
             the corresponding trigger event (rising or falling or both).

    (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority 
        mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using
        HAL_NVIC_EnableIRQ().
         
    (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin().
            
    (#) To set/reset the level of a pin configured in output mode use 
        HAL_GPIO_WritePin()/HAL_GPIO_TogglePin().
    
    (#) To lock pin configuration until next reset use HAL_GPIO_LockPin().

                 
    (#) During and just after reset, the alternate functions are not 
        active and the GPIO pins are configured in input floating mode (except JTAG
        pins).
  
    (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose 
        (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has 
        priority over the GPIO function.
  
    (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as 
        general purpose PH0 and PH1, respectively, when the HSE oscillator is off. 
        The HSE has priority over the GPIO function.

HAL庫的使用方法跟之前F4系列的標準庫差不多,只是HAL庫封裝的稍顯臃腫。事情都是兩面的,代碼臃腫了,易用性會好些。

1.6   CMSIS軟件包介紹

CMSIS(微控制器軟件接口標準,Cortex Microcontroller Software Interface Standard)是ARM官方設計的驅動包,框圖如下:

 

ARM推出CMSIS軟件包意在統一各大芯片廠商的外設驅動,DSP數字信號處理,下載器和各個主流RTOS的API統一。幾年下來,各個廠商一直是各自爲戰,所以CMSIS的驅動一直沒有被各個芯片廠商採用。而且ARM做得也不夠完善,沒有ADC、DAC、定時器之類的外設驅動。

這兩年情況好了不少,特別是ARM爲ST做的CMSIS-Driver明顯完善了很多。針對我們這個教程來說,當前還用不到這些東西,主要用到CMSIS軟件包裏面的如下頭文件即可(不同版本,截圖中的文件可能不同,這個軟件包是一直在更新中的,下面的截圖的版本是V5.5.1):

 

這個軟件包可以在三個地方獲取:

  •   STM32CubeF4軟件包裏面。

每個版本的Cube軟件包都會攜帶CMSIS文件夾。

  •   MDK安裝目錄(下面是5.5.1版本的路徑)。

大家安裝了新版MDK後,CMSIS軟件包會存在於路徑:ARM\PACK\ARM\CMSIS\5.5.1\CMSIS。

  •   GitHub。

通過GitHub獲取也比較方便,地址:https://github.com/ARM-software/CMSIS_5 。點擊右上角就可以下載CMSIS軟件包了。

 

當然,也可以在ARM官網下載,只是這兩年ARM官網升級得非常頻繁,通過檢索功能找資料非常麻煩。所以不推薦大家到ARM官網下載資料了。

下面爲大家簡單介紹下CMSIS軟件包裏面這幾個文件夾:

 

  •   Core

Cortex-M處理器內核和外設的API。 它爲Cortex-M0,Cortex-M0 +,Cortex-M3,Cortex-M4,Cortex-M7,Cortex-M23,Cortex-M33,SC000和SC300提供了標準化接口。 還包括用於Cortex-M4,Cortex-M7和Cortex-M33 的SIMD指令。當前這個文件下只有一個示例文件,還用不上。

  •   Core_A

同上,只是用於Cortex-A5/A7/A9。

  •   DAP

這個是ARM官方推出的下載器固件,也就是大家所說的CMSIS-DAP下載器。

  •   Documentation

這個是CMSIS軟件包的Help文檔,打開後效果如下:

 

  •   Driver

這個是ARM做好的驅動框架,支持的外設如下:

 

針對不同廠商,ARM會出一個完整的驅動包,比如STM32F4系列,在MDK安裝目錄的此路徑下(前提是大家安裝了STM32F4軟件包):ARM\PACK\Keil\STM32F4xx_DFP\2.13.0\CMSIS\Driver。

ARM做的這個驅動跟HAL庫有什麼區別呢?ARM做的這個庫要調用到HAL的一些API,然後封裝了一些比較好用的API,方便用戶調用。

  •   DSP_Lib

這個是ARM提供的DSP庫,此庫支持以CM0、CM3、CM4以及CM7爲內核的所有MCU,含源碼。詳細介紹可以看我們的DSP教程:http://www.armbbs.cn/forum.php?mod=viewthread&tid=3886

  •   Include

這個文件比較重要,雖然是頭文件,但是封裝了很多內核方面的API,是大家工程裏面務必包含的路徑。

  •   Lib

這個文件是GCC和MDK格式的DSP庫文件。

  •   NN

這個是ARM新出的神經網絡庫,框圖如下:

  •   Packs

這個文件沒什麼用,大家不用管。

  •   RTOS

這個是RTX4以及CMSIS-RTOS V1封裝層,含源碼,免費,Apache-2.0授權。

  •   RTOS2

這個是RTX5以及CMSIS-RTOS V2封裝層,含源碼,免費,Apache-2.0授權。

  •   SVD

SVD的全稱是System View Description,系統視圖描述。對芯片的外設、存儲器等進行了詳細描述,編譯器要用到這個文件,不同系列芯片有不同的SVD文件。以STM32F407爲例,在MDK的option選項裏面可以看到以svd爲後綴的文件被調用。

 

  •   Utilities

這個文件裏面提供了一些實用的小軟件或者文件。

 

關於CMSIS軟件包就爲大家介紹這麼多,後面用到哪個文件時,再爲大家詳細介紹。

1.7   STM32CubeMX開發平臺

STM32CubeMX是ST在2014年推出的圖形開發軟件,方便用戶配置時鐘、外設、引腳以及RTOS和各種中間件。整體框圖如下:

 

通過這個圖形軟件,可以讓大家方便地生成工程代碼,支持MDK,IAR,TrueSTUDIO等編譯器。針對STM32CubeMX的使用,後面會專門做幾期專題教程。

1.8   STM32F407調試方法

STM32F407的調試方法主要分爲兩大類:

  •   MDK和IAR編譯器自帶的調試

MDK調試方法在第5章進行了詳細講解。

IAR調試方法在第7章進行了詳細講解。

  •   終極調試組件Event Recoder的使用方法。

在8章節進行了詳細講解。

1.9   STM32F407出現硬件異常的解決辦法

大家做項目時,經常會遇到硬件異常問題,所以專門爲此做了一個章節(具體在11章節進行了詳細講解)。

1.10 總結

本章節就爲大家講解這麼多,建議初學者花些時間對 STM32F407的開發文檔的章節結構瞭解一下,隨着以後的學習最好可以達到熟練查看這些開發文檔的程度。

 

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