【安富萊STM32H7教程】第1章 初學STM32H7的准備工作


完整教程下載地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

第1章   初學STM32H7的准備工作

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

1.1 初學者重要提示

1.2 開發環境說明

1.3 STM32H7和F1,F4系列的區別

1.4 STM32H7開發資源查找

1.5 HAL庫介紹

1.6 CMSIS軟件包

1.7 STM32CubeMX圖形平台

1.8 STM32H7調試方法

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

1.10總結

 

 

1.1   初學者重要提示

1、  關於學習方法問題,可以看附件章節A。

2、  學會 STM32H7相關資源的獲取方法,做到心中有數,否則心里老是沒底。

3、  關於MDK和IAR兩種編譯器,推薦都掌握,以其中一個為主,另一個為輔。因為很多時候我們需要參考的工程代碼不是自己熟悉的編譯器,就會很被動。

4、  相對於F1、F4系列,H7最大的區別的還是MPU和Cache的配置,這兩個配置會貫穿整個教程為大家做講解,而外設的學習大同小異。

5、  H7攜帶了DTCM和ITCM,ITCM用於運行指令,也就是程序代碼,DTCM用於數據存取,特點是跟內核速度一樣,而片上的其它RAM主頻都是200MHz,所以要充分發揮TCM的性能。

6、  STM32H7系列只有HAL庫,沒有再配套標准庫了,這點要知道。HAL庫的優點是配置方便,特別是配合圖形開發工具STM32CubeMX時,缺點是源代碼稍顯臃腫,封裝的有點多。

7、  這幾年涌現出好幾款非常棒的調試工具(如Event Recoder,SEGGER RTT),教程的后面章節會為大家做講解。

 

1.2   開發環境說明

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

        a.  MDK推薦使用MDK5.26正式版及其以上版本。

        b.  IAR固定使用IAR8.3版本,由於IAR向下兼容性稍差,其它版本未做支持。

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

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

1.3   STM32H7和F1,F4系列的區別

使用STM32H7跟F1,F4系列的區別。

1、  最大的區別H7是多了一個L1 Cache一級緩存,這個緩存在為低速存儲器帶來加速的同時,也為程序設計帶來了一些問題,其中最為主要的是數據一致性問題。

2、  STM32H7的自帶外設比較之前的任何STM32型號都要生猛,算是大換血了,換了ADC,DMA,USART等重要外設,性能比之前要強勁很多。比如ADC換成了3.6Msps 16位分辨率,DMA支持任意互聯了,USART也支持波特率自適應。

3、  到了STM32H7系列,ST官方僅提供了HAL庫,沒有再提供標准庫,而對於F1,F4系列,標准庫和HAL庫都是有的。

4、  F1是M3內核,F4是M4內核,而STM32H7是M7內核,從編程的角度來說,幾乎沒有區別。而性能上區別可以看此貼:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=21850

 

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

1.4   STM32H7開發資源查找

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

1.4.1      開發文檔

學習STM32H7主要下載哪些相關手冊呢?主要有以下幾個,這幾個手冊是我們經常要使用到的,不光學習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。雖然是STM32H7是M7內核,大部分內容跟M3/M4都是一樣的。論壇下載地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=2161

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

第1步:進入ST官方地址www.st.com,右上角輸入STM32H7檢索。

 

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

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

數據手冊標識:

 

應用筆記標識:

 

參考手冊標識:

 

編程手冊標識:

 

勘誤手冊標識:

 

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

1.4.2      軟件包

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

第1步:進入ST官方地址www.st.com ,右上角輸入STM32CubeH7檢索。

 

第2步:檢索后會彈出STM32CubeH7的軟件包選項。

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

 

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

點擊ACCEPT進入下面界面:

點擊Login/Register

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

1.5   HAL庫介紹

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

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

 

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

  1   ==============================================================================
  2 
  3                     ##### GPIO Peripheral features #####
  4 
  5   ==============================================================================
  6 
  7   [..]
  8 
  9   Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each
 10 
 11   port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software
 12 
 13   in several modes:
 14 
 15   (+) Input mode
 16 
 17   (+) Analog mode
 18 
 19   (+) Output mode
 20 
 21   (+) Alternate function mode
 22 
 23   (+) External interrupt/event lines
 24 
 25  
 26 
 27   [..] 
 28 
 29   During and just after reset, the alternate functions and external interrupt 
 30 
 31         lines are not active and the I/O ports are configured in input floating mode.
 32 
 33     
 34 
 35   [..]   
 36 
 37   All GPIO pins have weak internal pull-up and pull-down resistors, which can be
 38 
 39         activated or not.
 40 
 41  
 42 
 43   [..]
 44 
 45   In Output or Alternate mode, each IO can be configured on open-drain or push-pull
 46 
 47         type and the IO speed can be selected depending on the VDD value.
 48 
 49  
 50 
 51   [..] 
 52 
 53   All ports have external interrupt/event capability. To use external interrupt
 54 
 55         lines, the port must be configured in input mode. All available GPIO pins are
 56 
 57         connected to the 16 external interrupt/event lines from EXTI0 to EXTI15.
 58 
 59  
 60 
 61   [..]
 62 
 63   The external interrupt/event controller consists of up to 23 edge detectors
 64 
 65         (16 lines are connected to GPIO) for generating event/interrupt requests (each
 66 
 67         input line can be independently configured to select the type (interrupt or event)
 68 
 69         and the corresponding trigger event (rising or falling or both). Each line can
 70 
 71         also be masked independently.
 72 
 73  
 74 
 75                      ##### How to use this driver #####
 76 
 77   ============================================================================== 
 78 
 79   [..]
 80 
 81     (#) Enable the GPIO AHB clock using the following function: __HAL_RCC_GPIOx_CLK_ENABLE().
 82 
 83  
 84 
 85     (#) Configure the GPIO pin(s) using HAL_GPIO_Init().
 86 
 87         (++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure
 88 
 89         (++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef
 90 
 91              structure.
 92 
 93         (++) In case of Output or alternate function mode selection: the speed is
 94 
 95              configured through "Speed" member from GPIO_InitTypeDef structure.
 96 
 97         (++) In alternate mode is selection, the alternate function connected to the IO
 98 
 99              is configured through "Alternate" member from GPIO_InitTypeDef structure.
100 
101         (++) Analog mode is required when a pin is to be used as ADC channel
102 
103              or DAC output.
104 
105         (++) In case of external interrupt/event selection the "Mode" member from
106 
107              GPIO_InitTypeDef structure select the type (interrupt or event) and
108 
109              the corresponding trigger event (rising or falling or both).
110 
111  
112 
113     (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority
114 
115         mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using
116 
117         HAL_NVIC_EnableIRQ().
118 
119         
120 
121     (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin().
122 
123            
124 
125     (#) To set/reset the level of a pin configured in output mode use
126 
127         HAL_GPIO_WritePin()/HAL_GPIO_TogglePin().
128 
129                 
130 
131    (#) To lock pin configuration until next reset use HAL_GPIO_LockPin().
132 
133  
134 
135                 
136 
137     (#) During and just after reset, the alternate functions are not
138 
139         active and the GPIO pins are configured in input floating mode (except JTAG
140 
141         pins).
142 
143  
144 
145     (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose
146 
147         (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has
148 
149         priority over the GPIO function.
150 
151  
152 
153     (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as
154 
155         general purpose PH0 and PH1, respectively, when the HSE oscillator is off.
156 
157         The HSE has priority over the GPIO function.

 

HAL庫的使用方法跟之前F1,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.3.0):

 

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

1、STM32CubeH7軟件包里面。

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

2、MDK安裝目錄(下面是5.3.0版本的路徑)。

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

3、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會出一個完整的驅動包,比如STM32H7系列,在MDK安裝目錄的此路徑下(前提是大家安裝了STM32H7軟件包):ARM\PACK\Keil\STM32H7xx_DFP\2.1.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以及CMIS-RTOS V1封裝層,含源碼,免費,Apache-2.0授權。

RTOS2

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

SVD

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

 

Utilities

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

 

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

1.7   STM32CubeMX開發平台

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

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

1.8   STM32H7調試方法

STM32H7的調試方法主要分為兩大類:

1、MDK和IAR編譯器自帶的調試

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

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

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

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

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

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

1.10 總結

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM