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

1+X 傳感網(wǎng)中級備考STM32:HAL庫之GPIO函數(shù)功能介紹

發(fā)布者:Xingfu6666最新更新時間:2025-01-07 來源: jianshu關(guān)鍵字:STM32  HAL庫 手機看文章 掃描二維碼
隨時隨地手機看文章

1.函數(shù)存放路徑

HAL庫的GPIO函數(shù),存放路徑如圖1所示:路徑Driver/STM32F1xx_HAL_Driver/stm32f1xx_hal_gpio.c,其中一級文件夾STM32F1xx_HAL_Driver存放的是ST公司提供的HAL庫頭文件和源文件,也就是所有底層硬件抽象層API接口函數(shù)的聲明和定義;之前大家學(xué)習(xí)51單片機都是直接對寄存器進(jìn)行配置,而對于STM32數(shù)百個寄存器直接配置將非常繁瑣;HAL庫提供的這一整套API方便開發(fā)者直接調(diào)用函數(shù),不需要去知道操作的哪個寄存器;
但這不是說寄存器相關(guān)原理就完全不用學(xué)習(xí)了,相反,在STM32的學(xué)習(xí)過程中,大家既要知道函數(shù)的功能,也要了解各個外設(shè)的硬件運行機制;這樣HAL庫的開發(fā)才會游刃有余;后面的函數(shù)功能介紹部分,我們也會同步介紹相關(guān)寄存器的操作;
文件夾中的每一個源文件stm32f1xx_hal-ppp.c都對應(yīng)一個頭文件stm32f1xx_hal-ppp.h,

圖1,GPIO函數(shù)的存放路徑


2.1  HAL_GPIO_Init( )

函數(shù)功能介紹:該函數(shù)主要用來初始化我們需要用到的GPIO端口引腳,設(shè)置其工作頻率、工作模式、上下拉等參數(shù),當(dāng)使用CubeMX配置工程時,所有參數(shù)在CubeMX中調(diào)配,函數(shù)自動在工程中生成。
函數(shù)參數(shù):GPIOx: 是GPIO_TypeDef  *  類型,參數(shù)可選范圍是:.GPIOA~GPIOG;
函數(shù)參數(shù):GPIO_Init:是 GPIO_InitTypeDef *類型,該結(jié)構(gòu)體指針包含的變量有:GPIO口的速度,GPIO口的模式,GPIO口的上拉或下拉狀態(tài),GPIO口的Pin位操作引腳;
返回值:無
應(yīng)用場景:任何GPIO的端口都需要先進(jìn)行初始化操作;


 * @brief  Initializes the GPIOx peripheral according to the specified parameters in the GPIO_Init.

 * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral

 * @param  GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains

 *        the configuration information for the specified GPIO peripheral.

 * @retval None


void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init)


2.2   HAL_GPIO_WritePin()

函數(shù)功能:主要功能是給某個GPIO寫0或1;
注意事項:此函數(shù)使用GPIOx_BSRR寄存器來允許讀取/修改訪問。通過這種方式,在讀取和修改訪問之間沒有發(fā)生IRQ的風(fēng)險;
函數(shù)參數(shù):GPIOx: 是GPIO_TypeDef  * 類型,是GPIO寄存器類型,參數(shù)可選范圍是GPIOA~GPIOG;
函數(shù)參數(shù): GPIO_Pin:是unit16_t類型,是GPIO寄存器的位端口;連接外設(shè)LED燈;參數(shù)可選范圍是GPIO_PIN_0~GPIO_PIN_15;
函數(shù)參數(shù): PinState,指定要寫入選定位的值;參數(shù)可選范圍是,GPIO_PIN_RESET,GPIO_PIN_SET兩個值;
返回值:無;
應(yīng)用場景:設(shè)置LED燈亮滅,與延時函數(shù)配合使用;
寄存器關(guān)聯(lián):通過調(diào)用該函數(shù)HAL_GPIO_WritePin(),可以設(shè)置ODR寄存器的值(該寄存器的16位可讀可寫),然后IO端口即可輸出對應(yīng)寫入的值;


  * @brief  Sets or clears the selected data port bit.

  * @note   This function uses GPIOx_BSRR register to allow atomic read/modify

  *         accesses. In this way, there is no risk of an IRQ occurring between

  *         the read and the modify access.

  * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral

  * @param  GPIO_Pin: specifies the port bit to be written.

  *          This parameter can be one of GPIO_PIN_x where x can be (0..15).

  * @param  PinState: specifies the value to be written to the selected bit.

  *          This parameter can be one of the GPIO_PinState enum values:

  *           @arg GPIO_PIN_RESET: to clear the port pin

  *           @arg GPIO_PIN_SET: to set the port pin

  * @retval None


void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)


2.3 HAL_GPIO_TogglePin()

函數(shù)簡介:用于翻轉(zhuǎn)某個GPIO引腳的電平狀態(tài)。如果為0則變?yōu)?;如果為1則變?yōu)?。
函數(shù)參數(shù):GPIOx: 是GPIO_TypeDef  * 類型,是GPIO寄存器類型,參數(shù)可選范圍是GPIOA~GPIOG;
函數(shù)參數(shù): GPIO_Pin:是unit16_t類型,是GPIO寄存器的位端口;連接外設(shè)LED燈;參數(shù)可選范圍是GPIO_PIN_0~GPIO_PIN_15;
返回值:無
應(yīng)用場景:設(shè)置LED燈亮滅


  * @brief  Toggles the specified GPIO pin

  * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral

  * @param  GPIO_Pin: Specifies the pins to be toggled.

  * @retval None


void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)


2.4 HAL_GPIO_ReadPin()

函數(shù)簡介:讀取輸入端口引腳的狀態(tài);
函數(shù)參數(shù):GPIOx: 是GPIO_TypeDef  * 類型,是GPIO寄存器類型,參數(shù)可選范圍是GPIOA~GPIOG;
函數(shù)參數(shù): GPIO_Pin:是unit16_t類型,是GPIO寄存器的位端口;連接外設(shè)LED燈;參數(shù)可選范圍是GPIO_PIN_0~GPIO_PIN_15;
返回值:   引腳輸入狀態(tài)的值;返回值有:GPIO_PIN_RESET或GPIO_PIN_SET;
應(yīng)用場景:按鍵讀取GPIO的狀態(tài);

寄存器關(guān)聯(lián):通過調(diào)用函數(shù) HAL_GPIO_ReadPin(),
可以實現(xiàn)對IDR寄存器的數(shù)據(jù)讀取;
IDR是只讀輸入寄存器,并且只能以16 位的形式讀出;
例如要讀取GPIOF.5 的輸入電平,方法是:
HAL_GPIO_ReadPin (GPIOF, GPIO_Pin_5);



  * @brief  Reads the specified input port pin.

  * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral

  * @param  GPIO_Pin: specifies the port bit to read.

  *         This parameter can be GPIO_PIN_x where x can be (0..15).

  * @retval The input port pin value.


GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)


3.函數(shù)參數(shù):結(jié)構(gòu)體類型的函數(shù)參數(shù)

結(jié)構(gòu)體就是將多個變量組合為一個有機整體,
函數(shù)  HAL_GPIO_Init( ), 第一個參數(shù) 是 GPIO,它的類型是  GPIO_TypeDef  * ,指向結(jié)構(gòu)體變量(GPIO_TypeDef  )的指針;右鍵雙擊  GPIO_TypeDef,然后選擇 go to definition.就可以查看到該結(jié)構(gòu)體成員變量的定義如圖2所示:

圖2:GPIO_TypeDef 結(jié)構(gòu)體定義


該結(jié)構(gòu)體成員變量表示了7個寄存器的名稱,STM32 的每個 IO 端口都由這 7 個寄存器來控制;其中,我們最常用的 IO 端口寄存器是 4 個:CRL、CRH、IDR、ODR


2 個 32 位的端口配置寄存器 CRL 和 CRH;
2 個 32 位的數(shù)據(jù)寄存器 IDR 和 ODR;
1 個 32 位的置位/復(fù)位寄存器BSRR;
1個 16 位的復(fù)位寄存器 BRR;
1 個 32 位的鎖存寄存器 LCKR;

第二個參數(shù)是GPIO_Init:它的類型是GPIO_InitTypeDef *,指向結(jié)構(gòu)體變量(GPIO_InitTypeDef )的指針,其中GPIO_InitTypeDef結(jié)構(gòu)體包含了Pin,mode ,pull,speed等幾個成員變量,分別描述了GPIO口的速度,模式,和端口上拉或下拉狀態(tài)等;
結(jié)構(gòu)體指針成員變量的引用方法是通過 '->'符號實現(xiàn),比如要訪問GPIOC結(jié)構(gòu)體指針指向的成員變量Speed,方法是GPIOC-> Speed;

圖3 GPIO_InitTypeDef 結(jié)構(gòu)體定義

當(dāng)函數(shù)的入口參數(shù)隨著開發(fā)不得不增多時,采用結(jié)構(gòu)體變量,只需要在結(jié)構(gòu)體中增加成員變量,而不需要修改函數(shù)定義就可以達(dá)到增加變量的目的;從而提高代碼的可讀性。

關(guān)鍵字:STM32  HAL庫 引用地址:1+X 傳感網(wǎng)中級備考STM32:HAL庫之GPIO函數(shù)功能介紹

上一篇:單片機零基礎(chǔ)學(xué)習(xí)之從“點燈”入門STM32
下一篇:【STM32學(xué)習(xí)筆記5】EXTI外部中斷

推薦閱讀最新更新時間:2025-06-12 22:23

基于STM32單片機流水燈控制中的GPIO_Init()函數(shù)解析
學(xué)習(xí)STM32時,首先要熟悉流水燈例程,在這里就來分析流水燈中的GPIO_Init()函數(shù) 例如:流水燈例程中使用的端口是macLED1_GPIO_PORT=GPIOB, 控制的引腳是GPIO_Pin_0, 引腳的模式是GPIO_Mode_Out_PP(通用推挽輸出), 引腳的速率是GPIO_Speed_50MHz, 用到的寄存器是CRL 將上述的引腳、模式、速率換算成32位的16進(jìn)制,分別是: 1)控制的引腳是GPIO_Pin_0 換算成32位的16進(jìn)制是:0x0000 0001 2)引腳的模式是GPIO_Mode_Out_PP(通用推挽輸出) 換算成32位的16進(jìn)制是:0x0000 0010 3)引腳的速率是GPIO_Sp
[單片機]
基于<font color='red'>STM32</font>單片機流水燈控制中的<font color='red'>GPIO</font>_Init()<font color='red'>函數(shù)</font>解析
STM32 Hal庫SPI中斷
SPI從機接受接收中斷配置 SPI_HandleTypeDef SPI2_Handler; //SPI2句柄 uint8_t receive_byte; //SPI口初始化 void SPI2_Init(void) { SPI2_Handler.Instance=SPI2; //SPI2 SPI2_Handler.Init.Mode=SPI_MODE_SLAVE; //設(shè)置SPI工作模式,設(shè)置為主模式 SPI2_Handler.Init.Direction=SPI_DIRECTION_2LINES; //設(shè)置SPI單向或者雙向 SPI2_Handler.Init.
[單片機]
STM32F4xx GPIO函數(shù)解釋
以下內(nèi)容來自stm32f4xx_gpio.c gpio.c內(nèi)有14個函數(shù),其中讀寫操作9個、初始化操作3個、復(fù)用( Changes the mapping of the specified pin.---更改指定引腳映像),還有一個 Specifies the pins to be toggled. 切換指定引腳 。 一、函數(shù) 1、讀寫操作 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) //讀取輸入I/O口的引腳值 ---0或1 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)//讀取
[單片機]
STM32HAL庫DMA模式串口收發(fā)
一.簡單了解 串口模式實現(xiàn)有三種 1.普通模式:在主函數(shù)中接收函數(shù) 2.中斷模式:產(chǎn)生的不影響主程序運行 3. DMA模式:與主函數(shù)互不影響,獨立運行 本文記錄第一種普通模式。 學(xué)習(xí)目標(biāo)是:實現(xiàn)DMA串口的數(shù)據(jù)收發(fā),發(fā)送數(shù)據(jù)時LED燈電平翻轉(zhuǎn)。 二.步驟 1-在原來工程基礎(chǔ)上,在stm32cubemx中增加dma,usart1中的DMA Settings,ADD USART1_RX循環(huán)接收和USART1_TX單次發(fā)送 2-添加MDA宏定義代碼 #define UART1_DMA uint8_t TdataDMA ={ welcome to uart DMA!rn }; uint8_t Rdata; 3-在主函數(shù)添加
[單片機]
stm32F4 hal庫之CAN通信的實現(xiàn)
目標(biāo): 通過can總線,用stm32的CAN模塊實現(xiàn)對電機驅(qū)動發(fā)送指令,從而實現(xiàn)對電機的控制。 硬件設(shè)計: ①收發(fā)芯片的功能:把單片機送來的信號通過收發(fā)芯片的轉(zhuǎn)換從而實現(xiàn)信號的具體傳輸。 ②120歐終端電阻:主要是為了防止信號的干擾,一般來說,終端設(shè)備的CAN_H和CAN_L也要加上120歐終端電阻。 軟件設(shè)計基本知識: 其實各種通信方式的本質(zhì)都是一樣的,均分為兩個部分;①波特率:以何種速度來通信②具體準(zhǔn)則:發(fā)送端和接收端對發(fā)送來的數(shù)據(jù)的解釋。 特色:CAN工作于4種模式;類似于手機的飛行模式,正常模式,待機狀態(tài),是一種感覺。 CAN常用的工作模式是(1)回環(huán)模式:也就是自己發(fā),自己收。(2)正常工作模式
[單片機]
stm32F4 <font color='red'>hal庫</font>之CAN通信的實現(xiàn)
HAL庫教程8:通用定時器的使用
定時器溢出時間的計算 ??關(guān)于定時器溢出的時間計算,有個公式: ??定時器本質(zhì)上是一個不斷自加的計數(shù)器,只不過在自加的時候,能夠自動比較計數(shù)值跟某個設(shè)定值而已。定時器+1用時多少? ??1/84000000,單位是秒。 ??我想讓數(shù)的慢一點,感覺84Mhz的時鐘太快了,想用42Mhz可以嗎?可以,2分頻就行,這是+1的操作用時:2/84000000, ??數(shù)100個數(shù)字用時多少?100 * 2/84000000。 ??可能是為了避免用戶誤操作,給arr或psc寫一個0,所以arr與psc都需要做+1操作。 ??為了方便計算,在psc為8399的情況下,溢出時間就是(arr+1)/10,單位是毫秒。 ??能不能把psc設(shè)置為83
[單片機]
<font color='red'>HAL庫</font>教程8:通用定時器的使用
STM32開發(fā)入門
步驟 安裝環(huán)境 安裝Keil uVision5(mdk528a.exe) 通過Pack Installer安裝相應(yīng)芯片的Pack 問題解答 問題:選中相應(yīng)的Software Component缺還是顯示找不到頭文件 解答:修改RTEPATH路徑為英文路徑 STM32CubeMX與STM32CubeIDE的區(qū)別? CubeMX通過向?qū)Э焖偕纱a,CubeIDE包含了CubeMX和IDE
[單片機]
STM32學(xué)習(xí):I2C-EEPROM實驗
一、I2C總線介紹 I2C(Inter-Integrated Circuit)總線是由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。是微電子通信控制領(lǐng)域廣泛采用的一種總線標(biāo)準(zhǔn)。 它是同步通信的一種特殊形式,具有接口線少,控制方式簡單,器件封裝形式小,通信速率較高等優(yōu)點。 I2C總線只有兩根雙向信號線。一根是數(shù)據(jù)線SDA,另一根是時鐘線SCL。由于其管腳少,硬件實現(xiàn)簡單,可擴展性強等特點,因此被廣泛的使用在各大集成芯片內(nèi)。 (一)I2C物理層 I2C通信設(shè)備常用的連接方式.png 特點: (1)它是一個支持多設(shè)備的總線。 (2)I2C 總線只使用兩條總線線路,SDA、SCL。 (3)每個連接到總線的設(shè)備都
[單片機]
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 大洼县| 九龙坡区| 汾阳市| 乃东县| 浠水县| 商城县| 凤凰县| 刚察县| 崇阳县| 旅游| 景洪市| 泰兴市| 河间市| 吉林市| 盘锦市| 葵青区| 登封市| 义乌市| 桂平市| 当雄县| 句容市| 雅江县| 乌苏市| 莱芜市| 陈巴尔虎旗| 海阳市| 垦利县| 廉江市| 新绛县| 南木林县| 阜平县| 江源县| 上思县| 瑞昌市| 政和县| 当阳市| 镇雄县| 大埔县| 多伦县| 南充市| 黄山市|