娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32的三種開發方式 HAL庫固件庫安裝與用戶手冊

發布者:美好未來最新更新時間:2024-06-11 來源: elecfans關鍵字:STM32  HAL庫  固件庫 手機看文章 掃描二維碼
隨時隨地手機看文章

??相比較早幾年使用標準庫開發來講,最近幾年HAL庫的使用是越來越多,那么我們開發應當使用哪一種呢,本文著重介紹常用的幾種開發方式及相互之間的區別,白貓也好、黑貓也好,抓到耗子就是好貓。

STM32的三種開發方式

??通常新手在入門STM32的時候,首先都要先選擇一種要用的開發方式,不同的開發方式會導致你編程的架構是完全不一樣的。一般大多數都會選用標準庫和HAL庫,而極少部分人會通過直接配置寄存器進行開發。


??網上關于標準庫、HAL庫的描述相信是數不勝數。可是一個對于很多剛入門的朋友還是沒法很直觀的去真正了解這些不同開發發方式彼此之間的區別,所以筆者想以一種非常直白的方式,用自己的理解去將這些東西表述出來,如果有描述的不對的地方或者是不同意見的也可以大家提出。

1、直接配置寄存器

??不少先學了51的朋友可能會知道,會有一小部分人或是教程是通過匯編語言直接操作寄存器實現功能的,這種方法到了STM32就變得不太容易行得通了,因為STM32的寄存器數量是51單片機的十數倍,如此多的寄存器根本無法全部記憶,開發時需要經常的翻查芯片的數據手冊,此時直接操作寄存器就變得非常的費力了。但還是會有很小一部分人,喜歡去直接操作寄存器,因為這樣更接近原理,知其然也知其所以然。

2、標準庫

??上面也提到了,STM32有非常多的寄存器,而導致了開發困難,所以為此ST公司就為每款芯片都編寫了一份庫文件,也就是工程文件里stm32F1xx…之類的。在這些 .c .h文件中,包括一些常用量的宏定義,把一些外設也通過結構體變量封裝起來,如GPIO口時鐘等。所以我們只需要配置結構體變量成員就可以修改外設的配置寄存器,從而選擇不同的功能。也是目前最多人使用的方式,也是學習STM32接觸最多的一種開發方式,我也就不多闡述了。

3、HAL庫

??HAL庫是ST公司目前主力推的開發方式,全稱就是Hardware Abstraction Layer(抽象印象層)。庫如其名,很抽象,一眼看上去不太容易知道他的作用是什么。

??它的出現比標準庫要晚,但其實和標準庫一樣,都是為了節省程序開發的時期,而且HAL庫尤其的有效,如果說標準庫把實現功能需要配置的寄存器集成了,那么HAL庫的一些函數甚至可以做到某些特定功能的集成。也就是說,同樣的功能,標準庫可能要用幾句話,HAL庫只需用一句話就夠了。

??并且HAL庫也很好的解決了程序移植的問題,不同型號的stm32芯片它的標準庫是不一樣的,例如在F4上開發的程序移植到F3上是不能通用的,而使用HAL庫,只要使用的是相通的外設,程序基本可以完全復制粘貼,注意是相通外設,意思也就是不能無中生有,例如F7比F3要多幾個定時器,不能明明沒有這個定時器卻非要配置,但其實這種情況不多,絕大多數都可以直接復制粘貼。是而且使用ST公司研發的STMcube軟件,可以通過圖形化的配置功能,直接生成整個使用HAL庫的工程文件,可以說是方便至極,但是方便的同時也造成了它執行效率的低下,在各種論壇帖子真的是被吐槽的數不勝數。

HAL庫固件庫安裝與 用戶手冊

1、首先設置讓Cube可以自動聯網下載相關固件庫選擇updater Settings

05ac0f04-e945-11ec-ba43-dac502259ad0.png??設置如下

05c40852-e945-11ec-ba43-dac502259ad0.png

2、根據芯片選擇所需固件

??版本是向下兼容的,可以直接選擇最新版。但如果覺得最新版太大,可以閱讀下面的Main Changes.能夠支持你目前的芯片就好。

06361a6e-e945-11ec-ba43-dac502259ad0.png??選好了,點擊Install Now就行,過程可能有點長。建議直接官網下載到本地,再安裝文件會被下載到如下位置,建議更改此目錄,不要選在C盤?。?!

0663f970-e945-11ec-ba43-dac502259ad0.png

3、尋找用戶幫助手冊

??進入固件所在文件夾,里面包含很多內容。

0688c872-e945-11ec-ba43-dac502259ad0.png比如說 官方提供的開發板程序,每個型號下面都有對應功能的實現,用戶手冊就在Drivers文件夾下面。

06c0b1f6-e945-11ec-ba43-dac502259ad0.png06f34882-e945-11ec-ba43-dac502259ad0.png

STM32 HAL庫與標準庫的區別_淺談句柄、MSP函數、Callback函數

1、句柄

??句柄(handle),有多種意義,其中第一種是指程序設計,第二種是指Windows編程?,F在大部分都是指程序設計/程序開發這類。

  • 第一種解釋:句柄是一種特殊的智能指針 。當一個應用程序要引用其他系統(如數據庫、操作系統)所管理的內存塊或對象時,就要使用句柄。

  • 第二種解釋:整個Windows編程的基礎。一個句柄是指使用的一個唯一的整數值,即一個4字節(64位程序中為8字節)長的數值,來標識應用程序中的不同對象和同類中的不同的實例,諸如,一個窗口,按鈕,圖標,滾動條,輸出設備,控件或者文件等。應用程序能夠通過句柄訪問相應的對象的信息,但是句柄不是指針,程序不能利用句柄來直接閱讀文件中的信息。如果句柄不在I/O文件中,它是毫無用處的。句柄是Windows用來標志應用程序中建立的或是使用的唯一整數,Windows大量使用了句柄來標識對象。

STM32的標準庫中,句柄是一種特殊的指針,通常指向結構體!

??在STM32的標準庫中,假設我們要初始化一個外設(這里以USART為例),我們首先要初始化他們的各個寄存器。在標準庫中,這些操作都是利用固件庫結構體變量+固件庫Init函數實現的:


USART_InitTypeDefUSART_InitStructure;


USART_InitStructure.USART_BaudRate=bound;//串口波特率

USART_InitStructure.USART_WordLength=USART_WordLength_8b;//字長為8位數據格式

USART_InitStructure.USART_StopBits=USART_StopBits_1;//一個停止位

USART_InitStructure.USART_Parity=USART_Parity_No;//無奇偶校驗位

USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//無硬件數據流控制

USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//收發模式


USART_Init(USART3,&USART_InitStructure);//初始化串口1



可以看到,要初始化一個串口,需要:


1、對六個位置進行賦值

2、然后引用Init函數

??USART_InitStructure并不是一個全局結構體變量,而是只在函數內部的局部變量,初始化完成之后,USART_InitStructure就失去了作用。而在HAL庫中,同樣是USART初始化結構體變量,我們要定義為全局變量。


UART_HandleTypeDefUART1_Handler;

右鍵查看結構體成員


typedefstruct

{

USART_TypeDef*Instance;/*!< UART registers base address        */

UART_InitTypeDefInit;/*!< UART communication parameters      */

uint8_t*pTxBuffPtr;/*!< Pointer to UART Tx transfer Buffer */

uint16_tTxXferSize;/*!< UART Tx Transfer size              */

uint16_tTxXferCount;/*!< UART Tx Transfer Counter           */

uint8_t*pRxBuffPtr;/*!< Pointer to UART Rx transfer Buffer */

uint16_tRxXferSize;/*!< UART Rx Transfer size              */

uint16_tRxXferCount;/*!< UART Rx Transfer Counter           */

DMA_HandleTypeDef*hdmatx;/*!< UART Tx DMA Handle parameters      */

DMA_HandleTypeDef*hdmarx;/*!< UART Rx DMA Handle parameters      */

HAL_LockTypeDefLock;/*!< Locking object                     */

__IOHAL_UART_StateTypeDefState;/*!< UART communication state           */

__IOuint32_tErrorCode;/*!< UART Error code                    */

}UART_HandleTypeDef;


我們發現,與標準庫不同的是,該成員不僅:


1、包含了之前標準庫就有的六個成員(波特率,數據格式等),


2、還包含過采樣、(發送或接收的)數據緩存、數據指針、串口 DMA 相關的變量、各種標志位等等要在整個項目流程中都要設置的各個成員。


該 UART1_Handler就被稱為串口的句柄,它被貫穿整個USART收發的流程,比如開啟中斷:


HAL_UART_Receive_IT(&UART1_Handler,(u8*)aRxBuffer,RXBUFFERSIZE);

比如后面要講到的MSP與Callback回調函數:


voidHAL_UART_MspInit(UART_HandleTypeDef*huart);

voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart);

在這些函數中,只需要調用初始化時定義的句柄UART1_Handler就好。


2、MSP函數

MSP: MCU Specific Package 單片機的具體方案


MSP是指和MCU相關的初始化,引用一下正點原子的解釋,個人覺得說的很明白:


??我們要初始化一個串口,首先要設置和 MCU 無關的東西,例如波特率,奇偶校驗,停止位等,這些參數設置和 MCU 沒有任何關系,可以使用 STM32F1,也可以是 STM32F2/F3/F4/F7上的串口。而一個串口設備它需要一個 MCU 來承載,例如用 STM32F4 來做承載,PA9 做為發送,PA10 做為接收,MSP 就是要初始化 STM32F4 的 PA9,PA10,配置這兩個引腳。所以 HAL驅動方式的初始化流程就是:


HAL_USART_Init()—>HAL_USART_MspInit() ,先初始化與 MCU無關的串口協議,再初始化與 MCU 相關的串口引腳。


在 STM32 的 HAL 驅動中HAL_PPP_MspInit()作為回調,被 HAL_PPP_Init()函數所調用。當我們需要移植程序到 STM32F1平臺的時候,我們只需要修改 HAL_PPP_MspInit 函數內容而不需要修改 HAL_PPP_Init 入口參數內容。


??在HAL庫中,幾乎每初始化一個外設就需要設置該外設與單片機之間的聯系,比如IO口,是否復用等等,可見,HAL庫相對于標準庫多了MSP函數之后,移植性非常強,但與此同時卻增加了代碼量和代碼的嵌套層級??梢哉f各有利弊。


同樣,MSP函數又可以配合句柄,達到非常強的移植性:


voidHAL_UART_MspInit(UART_HandleTypeDef*huart);

3、Callback函數

??類似于MSP函數,個人認為Callback函數主要幫助用戶應用層的代碼編寫。


??還是以USART為例,在標準庫中,串口中斷了以后,我們要先在中斷中判斷是否是接收中斷,然后讀出數據,順便清除中斷標志位,然后再是對數據的處理,這樣如果我們在一個中斷函數中寫這么多代碼,就會顯得很混亂:


voidUSART3_IRQHandler(void)//串口1中斷服務程序

{

u8Res;

if(USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET)//接收中斷(接收到的數據必須是0x0d0x0a結尾)

{

Res=USART_ReceiveData(USART3);//讀取接收到的數據

/*數據處理區*/

}

}

}


而在HAL庫中,進入串口中斷后,直接由HAL庫中斷函數進行托管:


voidUSART1_IRQHandler(void)

{

HAL_UART_IRQHandler(&UART1_Handler);//調用HAL庫中斷處理公用函數

/***************省略無關代碼****************/

}

??HAL_UART_IRQHandler這個函數完成了判斷是哪個中斷(接收?發送?或者其他?),然后讀出數據,保存至緩存區,順便清除中斷標志位等等操作。


??比如我提前設置了,串口每接收五個字節,我就要對這五個字節進行處理。在一開始我定義了一個串口接收緩存區:


/*HAL庫使用的串口接收緩沖,處理邏輯由HAL庫控制,接收完這個數組就會調用HAL_UART_RxCpltCallback進行處理這個數組*/

/*RXBUFFERSIZE=5*/

u8aRxBuffer[RXBUFFERSIZE];

在初始化中,我在句柄里設置好了緩存區的地址,緩存大?。ㄎ鍌€字節)


/*該代碼在HAL_UART_Receive_IT函數中,初始化時會引用*/

huart->pRxBuffPtr=pData;//aRxBuffer

huart->RxXferSize=Size;//RXBUFFERSIZE

huart->RxXferCount=Size;//RXBUFFERSIZE

??則在接收數據中,每接收完五個字節,HAL_UART_IRQHandler才會執行一次Callback函數:


voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart);

??在這個Callback回調函數中,我們只需要對這接收到的五個字節(保存在aRxBuffer[]中)進行處理就好了,完全不用再去手動清除標志位等操作。


??所以說Callback函數是一個應用層代碼的函數,我們在一開始只設置句柄里面的各個參數,然后就等著HAL庫把自己安排好的代碼送到手中就可以了~


??綜上,就是HAL庫的三個與標準庫不同的地方之個人見解。個人覺得從這三個小點就可以看出HAL庫的可移植性之強大,并且用戶可以完全不去理會底層各個寄存器的操作,代碼也更有邏輯性。但與此帶來的是復雜的代碼量,極慢的編譯速度,略微低下的效率。看怎么取舍了。


STM32 HAL庫結構

??說到STM32的HAL庫,就不得不提STM32CubeMX,其作為一個可視化的配置工具,對于開發者來說,確實大大節省了開發時間。STM32CubeMX就是以HAL庫為基礎的,且目前僅支持HAL庫及LL庫!首先看一下,官方給出的HAL庫的包含結構:

0737d01a-e945-11ec-ba43-dac502259ad0.png

1、stm32f4xx.h主要包含STM32同系列芯片的不同具體型號的定義,是否使用HAL庫等的定義,接著,其會根據定義的芯片信號包含具體的芯片型號的頭文件:

#ifdefined(STM32F405xx)

#include'stm32f405xx.h'

#elifdefined(STM32F415xx)

#include'stm32f415xx.h'

#elifdefined(STM32F407xx)

#include'stm32f407xx.h'

#elifdefined(STM32F417xx)

#include'stm32f417xx.h'

#else

#error'PleaseselectfirstthetargetSTM32F4xxdeviceusedinyourapplication(instm32f2xx.hfile)'

#endif


緊接著,其會包含stm32f4xx_hal.h。


2、stm32f4xx_hal.h:stm32f4xx_hal.c/h 主要實現HAL庫的初始化、系統滴答相關函數、及CPU的調試模式配置


3、stm32f4xx_hal_conf.h :該文件是一個用戶級別的配置文件,用來實現對HAL庫的裁剪,其位于用戶文件目錄,不要放在庫目錄中。


接下來對于HAL庫的源碼文件進行一下說明,HAL庫文件名均以stm32f4xx_hal開頭,后面加上_外設或者模塊名(如:stm32f4xx_hal_adc.c):


4、庫文件:stm32f4xx_hal_ppp.c/.h // 主要的外設或者模塊的驅動源文件,包含了該外設的通用API


stm32f4xx_hal_ppp_ex.c/.h // 外圍設備或模塊驅動程序的擴展文件。這組文件中包含特定型號或者系列的芯片的特殊API。以及如果該特定的芯片內部有不同的實現方式,則該文件中的特殊API將覆蓋_ppp中的通用API。


stm32f4xx_hal.c/.h // 此文件用于HAL初始化,并且包含DBGMCU、重映射和基于systick的時間延遲等相關的API


5、其他庫文件


用戶級別文件:


stm32f4xx_hal_msp_template.c // 只有.c沒有.h。它包含用戶應用程序中使用的外設的MSP初始化和反初始化(主程序和回調函數)。使用者復制到自己目錄下使用模板。


stm32f4xx_hal_conf_template.h // 用戶級別的庫配置文件模板。使用者復制到自己目錄下使用


system_stm32f4xx.c // 此文件主要包含SystemInit()函數,該函數在剛復位及跳到main之前的啟動過程中被調用。它不在啟動時配置系統時鐘(與標準庫相反)。時鐘的配置在用戶文件中使用HAL API來完成。startup_stm32f4xx.s // 芯片啟動文件,主要包含堆棧定義,終端向量表等 stm32f4xx_it.c/.h // 中斷處理函數的相關實現


6 main.c/.h //


根據HAL庫的命名規則,其API可以分為以下三大類:


初始化/反初始化函數:

HAL_PPP_Init(),HAL_PPP_DeInit()

IO 操作函數:

HAL_PPP_Read(),

HAL_PPP_Write(),

HAL_PPP_Transmit(),

HAL_PPP_Receive()

控制函數:

HAL_PPP_Set(),

HAL_PPP_Get().

狀態和錯誤:

**HAL_PPP_GetState(),

HAL_PPP_GetError().

注意:

??目前LL庫是和HAL庫捆綁發布的,所以在HAL庫源碼中,還有一些名為 stm32f2xx_ll_ppp的源碼文件,這些文件就是新增的LL庫文件。使用CubeMX生產項目時,可以選擇LL庫。


??HAL庫最大的特點就是對底層進行了抽象。在此結構下,用戶代碼的處理主要分為三部分:


處理外設句柄(實現用戶功能)

處理MSP

處理各種回調函數

相關知識如下:


1、外設句柄定義

??用戶代碼的第一大部分:對于外設句柄的處理。HAL庫在結構上,對每個外設抽象成了一個稱為ppp_HandleTypeDef的結構體,其中ppp就是每個外設的名字。*所有的函數都是工作在ppp_HandleTypeDef指針之下。


多實例支持:每個外設/模塊實例都有自己的句柄。因此,實例資源是獨立的

下面,以ADC為例


外圍進程相互通信:該句柄用于管理進程例程之間的共享數據資源。

/**

*@briefADChandleStructuredefinition

*/

typedefstruct

{

ADC_TypeDef*Instance;/*!< Register base address */

ADC_InitTypeDefInit;/*!< ADC required parameters */

__IOuint32_tNbrOfCurrentConversionRank;/*!< ADC number of current conversion rank */

DMA_HandleTypeDef*DMA_Handle;/*!< Pointer DMA Handler */

HAL_LockTypeDefLock;/*!< ADC locking object */

__IOuint32_tState;/*!< ADC communication state */

__IOuint32_tErrorCode;/*!< ADC Error code */

}ADC_HandleTypeDef;


??從上面的定義可以看出,ADC_HandleTypeDef中包含了ADC可能出現的所有定義,對于用戶想要使用ADC只要定義一個ADC_HandleTypeDef的變量,給每個變量賦好值,對應的外設就抽象完了。接下來就是具體使用了。


???當然,對于那些共享型外設或者說系統外設來說,他們不需要進行以上這樣的抽象,這些部分與原來的標準外設庫函數基本一樣。例如以下外設:


GPIO


SYSTICK


NVIC


RCC


FLASH


??以GPIO為例,對于HAL_GPIO_Init() 函數,其只需要GPIO 地址以及其初始化參數即可。


2、 三種編程方式

HAL庫對所有的函數模型也進行了統一。在HAL庫中,支持三種編程模式:輪詢模式、中斷模式、DMA模式(如果外設支持)。其分別對應如下三種類型的函數(以ADC為例):


HAL_StatusTypeDefHAL_ADC_Start(ADC_HandleTypeDef*hadc);

HAL_StatusTypeDefHAL_ADC_Stop(ADC_HandleTypeDef*hadc);


HAL_StatusTypeDefHAL_ADC_Start_IT(ADC_HandleTypeDef*hadc);

HAL_StatusTypeDefHAL_ADC_Stop_IT(ADC_HandleTypeDef*hadc);


HAL_StatusTypeDefHAL_ADC_Start_DMA(ADC_HandleTypeDef*hadc,uint32_t*pData,uint32_tLength);

HAL_StatusTypeDefHAL_ADC_Stop_DMA(ADC_HandleTypeDef*hadc);


???其中,帶_IT的表示工作在中斷模式下;帶_DMA的工作在DMA模式下(注意:DMA模式下也是開中斷的);什么都沒帶的就是輪詢模式(沒有開啟中斷的)。至于使用者使用何種方式,就看自己的選擇了。


??此外,新的HAL庫架構下統一采用宏的形式對各種中斷等進行配置(原來標準外設庫一般都是各種函數)。針對每種外設主要由以下宏:


__HAL_PPP_ENABLE_IT(HANDLE, INTERRUPT):使能一個指定的外設中斷

__HAL_PPP_DISABLE_IT(HANDLE, INTERRUPT):失能一個指定的外設中斷

__HAL_PPP_GET_IT (HANDLE, __ INTERRUPT __):獲得一個指定的外設中斷狀態

__HAL_PPP_CLEAR_IT (HANDLE, __ INTERRUPT __):清除一個指定的外設的中斷狀態

__HAL_PPP_GET_FLAG (HANDLE, FLAG):獲取一個指定的外設的標志狀態

__HAL_PPP_CLEAR_FLAG (HANDLE, FLAG):清除一個指定的外設的標志狀態

[1] [2]
關鍵字:STM32  HAL庫  固件庫 引用地址:STM32的三種開發方式 HAL庫固件庫安裝與用戶手冊

上一篇:利用Proteus仿真STM32實現DHT11溫濕度檢測
下一篇:NS32F103VBT6軟硬件替代STM32F103VBT6

推薦閱讀最新更新時間:2025-04-01 19:31

STM32 HAL庫串口收發是如何使用的?
STM32是一款高性能的微控制器,它擁有廣泛的應用領域,其中包括了各種通訊應用,如UART串口通訊。HAL庫是ST公司為了方便開發者使用STM32而開發的一種庫,它提供了一種簡單易用的方法來使用STM32的各種外設。 本文將詳細介紹如何使用STM32 HAL庫來進行串口通信,包括初始化、發送數據和接收數據等方面。 1. 初始化串口 首先需要初始化串口外設,按照HAL庫的方法,我們需要定義一個串口句柄,然后對句柄中的各項參數進行賦值,包括波特率、數據位、停止位、奇偶校驗位等等。根據不同的外設,具體的初始化內容可能會稍有不同。 示例代碼如下: ```c UART_HandleTypeDef huart; void UART_Init(
[單片機]
stm32讀取電壓HAL庫版本
/* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ uint16_t adc_value = 0; double voltage = 0.0; char voltString = {0}; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); /*
[單片機]
<font color='red'>stm32</font>讀取電壓<font color='red'>HAL庫</font>版本
如何從官網下載STM32固件庫
想在ST官網下載STM32F10x的固件庫,找了很長時間才找到,為了方便像我一樣的菜鳥學習方便,現將如何從官網下載STM32F10x固件庫展示如下: 首先進入官網http:/www.st.com/ ,如下圖: 在下面選項卡中選擇Support- Tools & Resources,如下圖: 進入如下界面: 點擊左面的Software Tools,進入如下界面: 再點擊左側的Runtime Software下的Firmware進入如下界面: 在右側Firmware for MCUs下點選STM32,進入如下界面: 搜索也好,一個一個找也好,最后都會看到如下的一項: 可以看到最新的firmware是3.5
[單片機]
如何從官網下載<font color='red'>STM32</font><font color='red'>固件庫</font>
在Keil4中建立基于V3.4.0固件庫STM32工程
幾個月前剛接觸STM32時,第一感覺就是固件庫里的文件又多又深,還好發現固件庫里自帶有范例文件,但是它們全都是針對特定的評估板的,手頭只有一塊STM MCU 3 in 1 MiniKit。雖說作些修改就可為我所用,可對于像我這樣還沒入門的菜鳥,知道要如何修改,并且編譯通過,卻是非常困難。 昨晚閑暇,在網上找了一些資料,自己也學著新建了一個工程。今天寫下來,順帶溫故一遍。 首先介紹一下操作環境: Keil版本: μVision 4.1.0 STM32固件庫版本: V3.4.0 第一步,建立工程文件夾,在其子文件夾內拷貝并整理好相應的文件。 1.1、建立工程文件夾,將它命名為 Sys
[單片機]
STM32官方標準固件庫開發與寄存器開發的區別
一句話概括關系:固件庫就是函數的集合,固件庫函數的作用就是:向下負責與寄存器直接打交道,向上提供用戶函數調用的接口(API)。對于STM32這種級別的MCU,數百個寄存器記起來何談容易,于是推出了官方固件庫,固件庫將這些寄存器底層操作都封裝起來,提供一套API供開發者使用。大多數情況下,你不需要知道操作的是哪個寄存器,你只需要知道調用哪些函數即可。 對比一下:入下面只需要知道GPIO_SetBit這個函數的使用即可。 寄存器操作: 庫函數操作: 任何的處理器,不管多么高級,歸根結底都是對寄存器的操作。固件庫不是萬能的,如果想要把STM32學透,知其然知其所以然,光讀STM32固件庫是遠遠不夠的。但是如果知識為了完成
[單片機]
<font color='red'>STM32</font>官方標準<font color='red'>固件庫</font>開發與寄存器開發的區別
STM32Hal庫學習(三)CubeMx學習外部中斷
外部中斷主要是在CubeMx中設置好GPIO 在引腳界面配置成中斷 然后configuration里對GPIO配置 對于低電平觸發中斷,需要把GPIO設置為上拉,然后下降沿觸發,反之高電平觸發,反過來 對NVIC配置 在生成的程序里 stm32f1xx_it.c里有EXTI0中斷處理函數 此函數在stm32f1xx_hal_gpio.c里 中斷標志位不為0,清零然后調用回調函數 __weak函數用于定義變量或者函數,常見于定義函數,在MDK ARM鏈接時優先鏈接定義為非weak的函數或變量,如果找不到則再鏈接weak函數 在main里自定義HAL_GPIO
[單片機]
STM32<font color='red'>Hal庫</font>學習(三)CubeMx學習外部中斷
STM32一文通(7) 系統定時器
直接看第五節就是定時函數. 下面的內容都是在介紹原理 3.0 版以后的 STM32 固件庫在標準外設庫中移除了 SysTick 的驅動,因此用戶必須調用 CMSIS 定義的函數。 CMSIS 只提供了一個 SysTick 設置的函數,替代了 STM32 原有 SysTick 驅動的全部函數。 SysTick_Config(uint32_t ticks); -SysTick 計時器是 24 位的,所以設置參數的時候不要超過 24 位的范圍。 一. 什么是系統定時器 SysTick SysTick:系統定時器,24位,只能遞減,存在于內核,嵌套在NVIC中,所有的Cortex-M內核的單片機都具有這個定時器。 系統嘀嗒校準
[單片機]
stm32 USART串口應用不知道你會了多少
通用同步異步收發器(USART)提供了一種靈活的方法來與使用工業標準NR 異步串行數據格式的外部設備之間進行全雙工數據交換。 USART利用分數波特率發生器提供寬范圍的波特率選擇,支持同步單向通信和半雙工單線通信。 1、STM32固件庫使用外圍設備的主要思路 在STM32中,外圍設備的配置思路比較固定。首先是使能相關的時鐘,一方面是設備本身的時鐘,另一方面如果設備通過IO口輸出還需要使能IO口的時鐘;最后如果對應的IO口是復用功能的IO口,則還必須使能AFIO的時鐘。 其次是配置GPIO,GPIO的各種屬性由硬件手冊的AFIO一章詳細規定,較為簡單。 接著相關設備需要如果需要使用中斷功能,必須先配置中斷優先級,后文詳述。 然后
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 西乌珠穆沁旗| 房产| 邵阳市| 涪陵区| 灵石县| 千阳县| 开封市| 油尖旺区| 千阳县| 肃北| 凤冈县| 涟源市| 东港市| 揭阳市| 察哈| 罗定市| 黎平县| 潞城市| 上饶县| 海宁市| 腾冲县| 宁河县| 长泰县| 平凉市| 丁青县| 鸡泽县| 讷河市| 修水县| 阳山县| 日土县| 香格里拉县| 巴东县| 千阳县| 兴仁县| 荔浦县| 昭通市| 桑日县| 汶川县| 资中县| 惠水县| 团风县|