0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HAL庫(kù)的函數(shù)調(diào)用示例

科技綠洲 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2024-12-02 14:01 ? 次閱讀

HAL(Hardware Abstraction Layer,硬件抽象層)庫(kù)是STM32微控制器中常用的庫(kù),它為開(kāi)發(fā)者提供了訪問(wèn)和控制硬件設(shè)備的接口。以下是一些常用的HAL庫(kù)函數(shù)及其調(diào)用示例:

一、GPIO(通用輸入輸出)相關(guān)函數(shù)

  1. GPIO初始化
c復(fù)制代碼GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.Pin = GPIO_PIN_4; // 指定要配置的GPIO引腳GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 選擇所選引腳的工作模式,這里為推挽輸出GPIO_InitStruct.Pull = GPIO_NOPULL; // 指定所選引腳的上拉或下拉激活,這里為無(wú)上下拉GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 指定所選引腳的速度,這里為低速HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); // 初始化GPIOC的第4引腳
  1. 讀取引腳電平狀態(tài)
c復(fù)制代碼GPIO_PinState pinState = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4); // 讀取GPIOC的第4引腳電平狀態(tài)
  1. 配置引腳輸出電平
c復(fù)制代碼HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_SET); // 將GPIOC的第4引腳電平設(shè)置為高HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_RESET); // 將GPIOC的第4引腳電平設(shè)置為低
  1. 翻轉(zhuǎn)引腳電平狀態(tài)
c復(fù)制代碼HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_4); // 翻轉(zhuǎn)GPIOC的第4引腳電平狀態(tài)
  1. 外部中斷服務(wù)函數(shù)及回調(diào)
c復(fù)制代碼// 在中斷服務(wù)函數(shù)中調(diào)用void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) {    if (GPIO_Pin == GPIO_PIN_4) {        // 處理GPIOC的第4引腳外部中斷    }    // 調(diào)用回調(diào)函數(shù)    HAL_GPIO_EXTI_Callback(GPIO_Pin);}// 自定義的中斷回調(diào)函數(shù)void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {    if (GPIO_Pin == GPIO_PIN_4) {        // 在這里添加中斷處理代碼    }}

二、UART(通用異步收發(fā)傳輸器)相關(guān)函數(shù)

  1. UART初始化
c復(fù)制代碼UART_HandleTypeDef huart1;huart1.Instance = USART1; // 指定USART實(shí)例huart1.Init.BaudRate = 9600; // 波特率huart1.Init.WordLength = UART_WORDLENGTH_8B; // 字長(zhǎng)huart1.Init.StopBits = UART_STOPBITS_1; // 停止位huart1.Init.Parity = UART_PARITY_NONE; // 校驗(yàn)位huart1.Init.Mode = UART_MODE_TX_RX; // 模式:發(fā)送和接收huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 硬件流控制huart1.Init.OverSampling = UART_OVERSAMPLING_16; // 過(guò)采樣HAL_UART_Init(&huart1); // 初始化UART
  1. 發(fā)送數(shù)據(jù)
c復(fù)制代碼uint8_t dataToSend[] = "Hello, UART!";HAL_UART_Transmit(&huart1, dataToSend, sizeof(dataToSend) - 1, HAL_MAX_DELAY); // 發(fā)送數(shù)據(jù)
  1. 中斷方式接收數(shù)據(jù)
c復(fù)制代碼uint8_t receivedData;HAL_UART_Receive_IT(&huart1, &receivedData, 1); // 以中斷方式接收一個(gè)字節(jié)數(shù)據(jù)
  1. UART中斷處理及回調(diào)
c復(fù)制代碼// 在中斷處理函數(shù)中調(diào)用void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) {    if (huart- >Instance == USART1) {        // 處理USART1的中斷        HAL_UART_IRQHandler(huart); // 調(diào)用HAL庫(kù)的中斷處理函數(shù)    }}// 自定義的接收中斷回調(diào)函數(shù)void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {    if (huart- >Instance == USART1) {        // 在這里添加接收中斷處理代碼    }}

三、定時(shí)器(Timer)相關(guān)函數(shù)

  1. 定時(shí)器初始化
c復(fù)制代碼TIM_HandleTypeDef htim2;htim2.Instance = TIM2; // 指定定時(shí)器實(shí)例htim2.Init.Prescaler = 8399; // 預(yù)分頻器值htim2.Init.CounterMode = TIM_COUNTERMODE_UP; // 計(jì)數(shù)器模式:向上計(jì)數(shù)htim2.Init.Period = 9999; // 自動(dòng)重裝載值htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; // 時(shí)鐘分頻htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; // 自動(dòng)重裝載預(yù)裝載使能HAL_TIM_Base_Init(&htim2); // 初始化定時(shí)器
  1. 在中斷模式下啟動(dòng)定時(shí)器
c復(fù)制代碼HAL_TIM_Base_Start_IT(&htim2); // 在中斷模式下啟動(dòng)定時(shí)器
  1. 定時(shí)器中斷回調(diào)函數(shù)
c復(fù)制代碼// 自定義的定時(shí)器中斷回調(diào)函數(shù)void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {    if (htim- >Instance == TIM2) {        // 在這里添加定時(shí)器中斷處理代碼    }}

以上是HAL庫(kù)中GPIO、UART和定時(shí)器相關(guān)函數(shù)的一些調(diào)用示例。在實(shí)際開(kāi)發(fā)中,可能還需要根據(jù)具體需求進(jìn)行更多的配置和調(diào)用。同時(shí),請(qǐng)注意在使用HAL庫(kù)函數(shù)時(shí),需要確保已經(jīng)正確配置了微控制器的時(shí)鐘、引腳等外設(shè)資源。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7574

    瀏覽量

    151707
  • 硬件
    +關(guān)注

    關(guān)注

    11

    文章

    3351

    瀏覽量

    66327
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4340

    瀏覽量

    62791
  • HAL庫(kù)
    +關(guān)注

    關(guān)注

    1

    文章

    121

    瀏覽量

    6336
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32G HAL庫(kù)HAL_init()代碼中,為什么SysTick_Config函數(shù)調(diào)用?

    STM32G HAL庫(kù)HAL_init()代碼中,為什么SysTick_Config函數(shù)調(diào)用?
    發(fā)表于 03-12 07:46

    HAL庫(kù)函數(shù)調(diào)用flash .c 中的HAL_FLASH_Program_HalfWord函數(shù)編譯出錯(cuò)

    HAL庫(kù)函數(shù) 調(diào)用flash .c 中的HAL_FLASH_Program_HalfWord函數(shù)
    發(fā)表于 09-06 18:51

    HAL庫(kù)SPI DMA循環(huán)調(diào)用問(wèn)題

    使用HAL庫(kù)的SPI DMA方式讀取一個(gè)器件的數(shù)據(jù),然后在回調(diào)函數(shù)中開(kāi)啟下一個(gè)器件的SPI DMA方式來(lái)讀取數(shù)據(jù),依此方式依次讀取幾個(gè)器件,比如器件1、2、3。。。。。。,用SPI DMA函數(shù)
    發(fā)表于 12-17 08:58

    HAL庫(kù)實(shí)現(xiàn)延時(shí)相關(guān)的函數(shù)

    HAL 庫(kù)有提供延時(shí)函數(shù),只不過(guò)它只能實(shí)現(xiàn)簡(jiǎn)單的毫秒級(jí)別延時(shí),沒(méi)有實(shí)現(xiàn) us 級(jí)別延時(shí)。下面我們列出HAL 庫(kù)實(shí)現(xiàn)延時(shí)相關(guān)的
    發(fā)表于 08-24 07:45

    STM32標(biāo)準(zhǔn)庫(kù)改為HAL庫(kù)的程序?qū)崿F(xiàn)

    標(biāo)準(zhǔn)庫(kù)占絕大多數(shù),自己買(mǎi)的板子跟的資料也一般是標(biāo)準(zhǔn)庫(kù),HAL庫(kù)很少,不過(guò)要是使用STM32CubeMx配置,那么就是使用的HAL
    發(fā)表于 11-22 11:23 ?3.5w次閱讀

    如何在函數(shù)庫(kù)調(diào)用指令?

    函數(shù)是一段可復(fù)用的代碼。我們通常把重復(fù)的代碼放進(jìn)函數(shù)中并且在不同的地方去調(diào)用它。庫(kù)函數(shù)的集合。我們可以在庫(kù)中定義經(jīng)常使用的
    的頭像 發(fā)表于 08-31 15:51 ?3843次閱讀

    HAL庫(kù)中斷處理以及相關(guān)的回調(diào)函數(shù)

    驅(qū)動(dòng)的開(kāi)發(fā)時(shí)間,把重心放在應(yīng)用代碼上。 ? 但是,STM32CubeMX只是生成了底層驅(qū)動(dòng)的初始化代碼。所以,我們還需要掌握:應(yīng)用層代碼如何調(diào)用HAL庫(kù)函數(shù)(API接口),以及HAL
    的頭像 發(fā)表于 01-07 11:46 ?9502次閱讀
    <b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b>中斷處理以及相關(guān)的回調(diào)<b class='flag-5'>函數(shù)</b>

    【STM32】標(biāo)準(zhǔn)庫(kù)HAL庫(kù)對(duì)照學(xué)習(xí)教程三--使用庫(kù)函數(shù)配置GPIO點(diǎn)亮LED燈

    【STM32】標(biāo)準(zhǔn)庫(kù)HAL庫(kù)對(duì)照學(xué)習(xí)教程三--使用庫(kù)函數(shù)配置GPIO點(diǎn)亮LED燈一、前言二、準(zhǔn)備工作三、LED硬件電路四、使用標(biāo)準(zhǔn)庫(kù)工程點(diǎn)
    發(fā)表于 12-05 14:06 ?15次下載
    【STM32】標(biāo)準(zhǔn)<b class='flag-5'>庫(kù)</b>與<b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b>對(duì)照學(xué)習(xí)教程三--使用庫(kù)<b class='flag-5'>函數(shù)</b>配置GPIO點(diǎn)亮LED燈

    STM32 HAL庫(kù)與標(biāo)準(zhǔn)庫(kù)的區(qū)別_淺談句柄、MSP函數(shù)、Callback函數(shù)

    最近筆者開(kāi)始學(xué)習(xí)STM32的HAL庫(kù),由于以前一直用標(biāo)準(zhǔn)庫(kù)進(jìn)行開(kāi)發(fā),于是發(fā)現(xiàn)了HAL庫(kù)幾點(diǎn)好玩的地方,在此分享。1.句柄在STM32的標(biāo)準(zhǔn)
    發(fā)表于 12-16 16:57 ?30次下載
    STM32 <b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b>與標(biāo)準(zhǔn)<b class='flag-5'>庫(kù)</b>的區(qū)別_淺談句柄、MSP<b class='flag-5'>函數(shù)</b>、Callback<b class='flag-5'>函數(shù)</b>

    STM32 HAL 庫(kù)延時(shí)函數(shù) HAL_Delay 解析

    HAL 庫(kù)有提供延時(shí)函數(shù),只不過(guò)它只能實(shí)現(xiàn)簡(jiǎn)單的毫秒級(jí)別延時(shí),沒(méi)有實(shí)現(xiàn) us 級(jí)別延時(shí)。下面我們列出HAL 庫(kù)實(shí)現(xiàn)延時(shí)相關(guān)的
    發(fā)表于 01-17 09:48 ?8次下載
    STM32 <b class='flag-5'>HAL</b> <b class='flag-5'>庫(kù)</b>延時(shí)<b class='flag-5'>函數(shù)</b> <b class='flag-5'>HAL</b>_Delay 解析

    HAL庫(kù)中用定時(shí)器實(shí)現(xiàn)自定義延時(shí)函數(shù)delay_us()

    STM32程序從標(biāo)準(zhǔn)庫(kù)移植到HAL庫(kù)的時(shí)候,會(huì)發(fā)現(xiàn)HAL庫(kù)中只有一個(gè)毫秒級(jí)延時(shí)函數(shù)
    的頭像 發(fā)表于 09-21 10:33 ?1.1w次閱讀

    HAL庫(kù)無(wú)法實(shí)現(xiàn)UART的DMA傳輸真是這樣嗎?

    使用STM32CubeMx進(jìn)行圖形化配置,并生成基于HAL庫(kù)的初始代碼,要實(shí)現(xiàn)UART收發(fā)功能的DMA傳輸?shù)脑?,除了安排好的收發(fā)緩沖內(nèi)存外,再就只需調(diào)用下面兩個(gè)HAL
    的頭像 發(fā)表于 01-08 11:16 ?2870次閱讀

    SCL中調(diào)用函數(shù)示例

    在此,可插入函數(shù) (FC) 調(diào)用函數(shù)塊 (FB) 調(diào)用。函數(shù)塊可作為單實(shí)例、多重實(shí)例或參數(shù)實(shí)例進(jìn)行調(diào)用
    的頭像 發(fā)表于 06-06 10:18 ?2259次閱讀

    HAL庫(kù)常用函數(shù)匯總

    1,系統(tǒng)函數(shù)HAL_Delay原型:voidHAL_Delay(uint32_tDelay);作用:利用滴答定時(shí)器生成的系統(tǒng)延遲函數(shù)參數(shù):Delay:延遲時(shí)間,單位是ms返回值:無(wú)示例
    的頭像 發(fā)表于 11-29 08:00 ?3695次閱讀
    <b class='flag-5'>HAL</b><b class='flag-5'>庫(kù)</b>常用<b class='flag-5'>函數(shù)</b>匯總

    如何快速入門(mén)HAL庫(kù)編程 HAL庫(kù)與裸機(jī)編程的比較

    如何快速入門(mén)HAL庫(kù)編程 要快速入門(mén)HAL庫(kù)編程,可以遵循以下步驟: 了解基礎(chǔ)知識(shí) : 掌握C語(yǔ)言編程基礎(chǔ),包括變量、數(shù)據(jù)類(lèi)型、函數(shù)、指針等
    的頭像 發(fā)表于 12-02 11:39 ?367次閱讀