俗話說萬事開頭難,學習一門新的知識,難的每每不是知識自己,而是如何快速上手,須要什麼資料和開發環境。一旦上手後,深刻的學習就相對容易些了。php
1.1 初學者重要提示git
1.2 開發環境說明github
1.3 STM32H7和F1,F4系列的區別編程
1.4 STM32H7開發資源查找緩存
1.5 HAL庫介紹網絡
1.6 CMSIS軟件包app
1.7 STM32CubeMX圖形平臺框架
1.8 STM32H7調試方法工具
1.9 STM32H7出現硬件異常的解決辦法性能
1.10總結
一、 關於學習方法問題,能夠看附件章節A。
二、 學會 STM32H7相關資源的獲取方法,作到心中有數,不然內心總是沒底。
三、 關於MDK和IAR兩種編譯器,推薦都掌握,以其中一個爲主,另外一個爲輔。由於不少時候咱們須要參考的工程代碼不是本身熟悉的編譯器,就會很被動。
四、 相對於F一、F4系列,H7最大的區別的仍是MPU和Cache的配置,這兩個配置會貫穿整個教程爲你們作講解,而外設的學習大同小異。
五、 H7攜帶了DTCM和ITCM,ITCM用於運行指令,也就是程序代碼,DTCM用於數據存取,特色是跟內核速度同樣,而片上的其它RAM主頻都是200MHz,因此要充分發揮TCM的性能。
六、 STM32H7系列只有HAL庫,沒有再配套標準庫了,這點要知道。HAL庫的優勢是配置方便,特別是配合圖形開發工具STM32CubeMX時,缺點是源代碼稍顯臃腫,封裝的有點多。
七、 這幾年涌現出好幾款很是棒的調試工具(如Event Recoder,SEGGER RTT),教程的後面章節會爲你們作講解。
一、 IDE:支持兩種IDE開發環境,MDK和IAR
a. MDK推薦使用MDK5.26正式版及其以上版本。
b. IAR固定使用IAR8.3版本,因爲IAR向下兼容性稍差,其它版本未作支持。
二、 調試器使用JLINK,CMSIS-DAP,ULINK或者STLINK都可。
三、 配套開發板是安富萊的:STM32-V7開發板,MCU是STM32H743XIH6。
使用STM32H7跟F1,F4系列的區別。
一、 最大的區別H7是多了一個L1 Cache一級緩存,這個緩存在爲低速存儲器帶來加速的同時,也爲程序設計帶來了一些問題,其中最爲主要的是數據一致性問題。
二、 STM32H7的自帶外設比較以前的任何STM32型號都要生猛,算是大換血了,換了ADC,DMA,USART等重要外設,性能比以前要強勁不少。好比ADC換成了3.6Msps 16位分辨率,DMA支持任意互聯了,USART也支持波特率自適應。
三、 到了STM32H7系列,ST官方僅提供了HAL庫,沒有再提供標準庫,而對於F1,F4系列,標準庫和HAL庫都是有的。
四、 F1是M3內核,F4是M4內核,而STM32H7是M7內核,從編程的角度來講,幾乎沒有區別。而性能上區別能夠看此貼:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=21850
總的來講,主要有上面這四點不一樣,其它地方與使用F1,F4系列是相同的。
學習一款新的芯片,須要你們從官方獲取兩方面的資料,一個是相關的技術文檔,好比參數手冊、數據手冊、應用筆記等;另外一個是軟件包,官方在軟件包中提供了外設驅動庫和基於此庫的大量例程。
學習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選項便可。進入後,全部的相關資源就都在這個頁面下了。
數據手冊標識:
應用筆記標識:
參考手冊標識:
編程手冊標識:
勘誤手冊標識:
基本上你們所需的開發文檔都在這個頁面下了。
經過上面小節整理完畢相關文檔後,就是STM32H7軟件包的下載了。軟件包也比較好找,一樣推薦1.4.1小節的方式。
第1步:進入ST官方地址www.st.com ,右上角輸入STM32CubeH7檢索。
第2步:檢索後會彈出STM32CubeH7的軟件包選項。
第3步:進入STM32CubeH7的頁面地址後,就在頁面的最底端看到這個軟件包了(隨着時間推移,版本會不斷更新)。
第4步:點擊按鈕「Get Software」後,彈出以下界面
點擊ACCEPT進入下面界面:
點擊Login/Register
經過上面四步就獲取了STM32H7的軟件包。軟件包的目錄結構以下:
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庫封裝的稍顯臃腫。事情都是兩面的,代碼臃腫了,易用性會好些。
CMSIS(微控制器軟件接口標準,Cortex Microcontroller Software Interface Standard)是ARM官方設計的驅動包,框圖以下:
ARM推出CMSIS軟件包意在統一各大芯片廠商的外設驅動,DSP數字信號處理,下載器和各個主流RTOS的API統一。幾年下來,各個廠商一直是各自爲戰,因此CMSIS的驅動一直沒有被各個芯片廠商採用。並且ARM作得也不夠完善,沒有ADC、DAC、定時器之類的外設驅動。
這兩年狀況好了很多,特別是ARM爲ST作的CMSIS-Driver明顯完善了不少。針對咱們這個教程來講,當前還用不到這些東西,主要用到CMSIS軟件包裏面的以下頭文件便可(不一樣版本,截圖中的文件可能不一樣,這個軟件包是一直在更新中的,下面的截圖的版本是V5.3.0):
這個軟件包能夠在三個地方獲取:
一、STM32CubeH7軟件包裏面。
每一個版本的Cube軟件包都會攜帶CMSIS文件夾。
二、MDK安裝目錄(下面是5.3.0版本的路徑)。
你們安裝了新版MDK後,CMSIS軟件包會存在於路徑:ARM\PACK\ARM\CMSIS\5.3.0\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會出一個完整的驅動包,好比STM32H7系列,在MDK安裝目錄的此路徑下(前提是你們安裝了STM32H7軟件包):ARM\PACK\Keil\STM32H7xx_DFP\2.1.0\CMSIS\Driver。
ARM作的這個驅動跟HAL庫有什麼區別呢?ARM作的這個庫要調用到HAL的一些API,而後封裝了一些比較好用的API,方便用戶調用。
DSP_Lib
這個是ARM提供的DSP庫,此庫支持以CM0、CM三、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軟件包就爲你們介紹這麼多,後面用到哪一個文件時,再爲你們詳細介紹。
STM32CubeMX是ST在2014年推出的圖形開發軟件,方便用戶配置時鐘、外設、引腳以及RTOS和各類中間件。總體框圖以下:
經過這個圖形軟件,可讓你們方便地生成工程代碼,支持MDK,IAR,TrueSTUDIO等編譯器。針對STM32CubeMX的使用,後面會專門作幾期專題教程。
STM32H7的調試方法主要分爲兩大類:
一、MDK和IAR編譯器自帶的調試
MDK調試方法在第5章進行了詳細講解。
IAR調試方法在第7章進行了詳細講解。
二、終極調試組件Event Recoder的使用方法。
在8章節進行了詳細講解。
你們作項目時,常常會遇到硬件異常問題,因此專門爲此作了一個章節(具體在11章節進行了詳細講解)。
本章節就爲你們講解這麼多,建議初學者花些時間對 STM32H7的開發文檔的章節結構瞭解一下,隨着之後的學習最好能夠達到熟練查看這些開發文檔的程度。