国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【STM32】HAL庫(kù)入門學(xué)習(xí)

這篇具有很好參考價(jià)值的文章主要介紹了【STM32】HAL庫(kù)入門學(xué)習(xí)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

1. 前言

2. Hal庫(kù)特點(diǎn)

3. 獲取方法

3.1 下載

3.2 所在目錄

4. HAL庫(kù)用戶手冊(cè)結(jié)構(gòu)

4.1 用戶手冊(cè)的文檔

4.2 “ADC”外設(shè)解析

4.3 Exported Functions

4.4 Exported Types

4.5 Exported Constants

4.6 Exported Macros

4.6 Private Contants

4.7 Private Macros

4.8 Private Functions

5. 結(jié)論

1. 前言

????????ST 為開(kāi)發(fā)者提供了非常方便的開(kāi)發(fā)庫(kù):有標(biāo)準(zhǔn)外設(shè)庫(kù)(SPL庫(kù))、HAL 庫(kù)(Hardware Abstraction Layer,硬件抽象層庫(kù))、LL 庫(kù)(Low-Layer,底層庫(kù))三種。前者是ST的老庫(kù)已經(jīng)停更了,后兩者是ST現(xiàn)在主推的開(kāi)發(fā)庫(kù)。

????????相比標(biāo)準(zhǔn)外設(shè)庫(kù),STM32Cube HAL庫(kù)表現(xiàn)出更高的抽象整合水平,HAL API集中關(guān)注各外設(shè)的公共函數(shù)功能,這樣便于定義一套通用的用戶友好的API函數(shù)接口,從而可以輕松實(shí)現(xiàn)從一個(gè)STM32產(chǎn)品移植到另一個(gè)不同的STM32系列產(chǎn)品。HAL庫(kù)是ST未來(lái)主推的庫(kù),ST新出的芯片已經(jīng)沒(méi)有STD庫(kù)了。目前,HAL庫(kù)已經(jīng)支持STM32全線產(chǎn)品。

2. Hal庫(kù)特點(diǎn)

  • 最大可移植性。
  • 提供了一整套一致的中間件組件,如RTOS,USB,TCP / IP和圖形等。
  • 通用的用戶友好的API函數(shù)接口。
  • ST新出的芯片已經(jīng)沒(méi)有標(biāo)準(zhǔn)庫(kù)。
  • HAL庫(kù)已經(jīng)支持STM32全線產(chǎn)品。

3. 獲取方法

3.1 下載

3.2 所在目錄

????????選擇Drivers。

stm32hal庫(kù)學(xué)習(xí),STM32,單片機(jī),stm32,嵌入式硬件,經(jīng)驗(yàn)分享

選擇Stm32F4xx_HAL_Driver。

stm32hal庫(kù)學(xué)習(xí),STM32,單片機(jī),stm32,嵌入式硬件,經(jīng)驗(yàn)分享

選擇STM32F417xx_User_Manual,STM32F407也應(yīng)用該文檔。

stm32hal庫(kù)學(xué)習(xí),STM32,單片機(jī),stm32,嵌入式硬件,經(jīng)驗(yàn)分享

4. HAL庫(kù)用戶手冊(cè)結(jié)構(gòu)

4.1 用戶手冊(cè)的文檔

????????用戶手冊(cè)文檔結(jié)構(gòu)如下圖所示。

stm32hal庫(kù)學(xué)習(xí),STM32,單片機(jī),stm32,嵌入式硬件,經(jīng)驗(yàn)分享

4.2 “ADC”外設(shè)解析

????????選擇“STM32F4xx_HAL_Driver”,并選擇“ADC”外設(shè),文檔結(jié)構(gòu)如下圖所示。

stm32hal庫(kù)學(xué)習(xí),STM32,單片機(jī),stm32,嵌入式硬件,經(jīng)驗(yàn)分享

????????圖中圈出的兩部分中,相對(duì)于HAL庫(kù)來(lái)說(shuō),含有“Exported”的對(duì)外,可供我們使用,含有 “Private”的對(duì)內(nèi),為HAL庫(kù)的私有內(nèi)容,我們不可以使用。

????????以ADC外設(shè)為例,對(duì)外的有Function(函數(shù))、Types(類型)、Constants(常量)和Macros(宏定義),對(duì)內(nèi)有Constants、Macros、Functions。下面在看看各部分具體內(nèi)容。

4.3 Exported Functions

????????主要包括初始化、運(yùn)行、外設(shè)控制、外設(shè)狀態(tài)等相關(guān)的函數(shù),可供用戶使用。如下:

HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc)
{
  HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  
  /* Check ADC handle */
  if(hadc == NULL)
  {
    return HAL_ERROR;
  }
  
  /* Check the parameters */
  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
  assert_param(IS_ADC_CLOCKPRESCALER(hadc->Init.ClockPrescaler));
  assert_param(IS_ADC_RESOLUTION(hadc->Init.Resolution));
  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ScanConvMode));
  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));
  assert_param(IS_ADC_EXT_TRIG(hadc->Init.ExternalTrigConv));
  assert_param(IS_ADC_DATA_ALIGN(hadc->Init.DataAlign));
  assert_param(IS_ADC_REGULAR_LENGTH(hadc->Init.NbrOfConversion));
  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DMAContinuousRequests));
  assert_param(IS_ADC_EOCSelection(hadc->Init.EOCSelection));
  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DiscontinuousConvMode));
  
  if(hadc->Init.ExternalTrigConv != ADC_SOFTWARE_START)
  {
    assert_param(IS_ADC_EXT_TRIG_EDGE(hadc->Init.ExternalTrigConvEdge));
  }
  
  if(hadc->State == HAL_ADC_STATE_RESET)
  {
#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
    /* Init the ADC Callback settings */
    hadc->ConvCpltCallback              = HAL_ADC_ConvCpltCallback;                 /* Legacy weak callback */
    hadc->ConvHalfCpltCallback          = HAL_ADC_ConvHalfCpltCallback;             /* Legacy weak callback */
    hadc->LevelOutOfWindowCallback      = HAL_ADC_LevelOutOfWindowCallback;         /* Legacy weak callback */
    hadc->ErrorCallback                 = HAL_ADC_ErrorCallback;                    /* Legacy weak callback */
    hadc->InjectedConvCpltCallback      = HAL_ADCEx_InjectedConvCpltCallback;       /* Legacy weak callback */
    if (hadc->MspInitCallback == NULL)
    {
      hadc->MspInitCallback = HAL_ADC_MspInit; /* Legacy weak MspInit  */
    }

    /* Init the low level hardware */
    hadc->MspInitCallback(hadc);
#else
    /* Init the low level hardware */
    HAL_ADC_MspInit(hadc);
#endif /* USE_HAL_ADC_REGISTER_CALLBACKS */

    /* Initialize ADC error code */
    ADC_CLEAR_ERRORCODE(hadc);
    
    /* Allocate lock resource and initialize it */
    hadc->Lock = HAL_UNLOCKED;
  }
  
  /* Configuration of ADC parameters if previous preliminary actions are      */ 
  /* correctly completed.                                                     */
  if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL))
  {
    /* Set ADC state */
    ADC_STATE_CLR_SET(hadc->State,
                      HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY,
                      HAL_ADC_STATE_BUSY_INTERNAL);
    
    /* Set ADC parameters */
    ADC_Init(hadc);
    
    /* Set ADC error code to none */
    ADC_CLEAR_ERRORCODE(hadc);
    
    /* Set the ADC state */
    ADC_STATE_CLR_SET(hadc->State,
                      HAL_ADC_STATE_BUSY_INTERNAL,
                      HAL_ADC_STATE_READY);
  }
  else
  {
    tmp_hal_status = HAL_ERROR;
  }
  
  /* Release Lock */
  __HAL_UNLOCK(hadc);

  /* Return function status */
  return tmp_hal_status;
}

4.4 Exported Types

????????Hal庫(kù)中用到的宏定義、自定義類型、枚舉、結(jié)構(gòu)體等,可供用戶使用。

4.5 Exported Constants

????????Hal庫(kù)中用到的常量,可供用戶使用。

4.6 Exported Macros

????????用define方式定義的函數(shù),可供用戶使用。

4.6 Private Contants

????????Hal庫(kù)自用的常量,不對(duì)外。

4.7 Private Macros

????????Hal庫(kù)自用的宏定義,不對(duì)外。

4.8 Private Functions

????????Hal庫(kù)自用的函數(shù),一般函數(shù)前加static,不對(duì)外。如下:

static void ADC_Init(ADC_HandleTypeDef* hadc)
{
  ADC_Common_TypeDef *tmpADC_Common;
  
  /* Set ADC parameters */
  /* Pointer to the common control register to which is belonging hadc    */
  /* (Depending on STM32F4 product, there may be up to 3 ADCs and 1 common */
  /* control register)                                                    */
  tmpADC_Common = ADC_COMMON_REGISTER(hadc);
  
  /* Set the ADC clock prescaler */
  tmpADC_Common->CCR &= ~(ADC_CCR_ADCPRE);
  tmpADC_Common->CCR |=  hadc->Init.ClockPrescaler;
  
  /* Set ADC scan mode */
  hadc->Instance->CR1 &= ~(ADC_CR1_SCAN);
  hadc->Instance->CR1 |=  ADC_CR1_SCANCONV(hadc->Init.ScanConvMode);
  
  /* Set ADC resolution */
  hadc->Instance->CR1 &= ~(ADC_CR1_RES);
  hadc->Instance->CR1 |=  hadc->Init.Resolution;
  
  /* Set ADC data alignment */
  hadc->Instance->CR2 &= ~(ADC_CR2_ALIGN);
  hadc->Instance->CR2 |= hadc->Init.DataAlign;
  
  /* Enable external trigger if trigger selection is different of software  */
  /* start.                                                                 */
  /* Note: This configuration keeps the hardware feature of parameter       */
  /*       ExternalTrigConvEdge "trigger edge none" equivalent to           */
  /*       software start.                                                  */
  if(hadc->Init.ExternalTrigConv != ADC_SOFTWARE_START)
  {
    /* Select external trigger to start conversion */
    hadc->Instance->CR2 &= ~(ADC_CR2_EXTSEL);
    hadc->Instance->CR2 |= hadc->Init.ExternalTrigConv;
    
    /* Select external trigger polarity */
    hadc->Instance->CR2 &= ~(ADC_CR2_EXTEN);
    hadc->Instance->CR2 |= hadc->Init.ExternalTrigConvEdge;
  }
  else
  {
    /* Reset the external trigger */
    hadc->Instance->CR2 &= ~(ADC_CR2_EXTSEL);
    hadc->Instance->CR2 &= ~(ADC_CR2_EXTEN);
  }
  
  /* Enable or disable ADC continuous conversion mode */
  hadc->Instance->CR2 &= ~(ADC_CR2_CONT);
  hadc->Instance->CR2 |= ADC_CR2_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode);
  
  if(hadc->Init.DiscontinuousConvMode != DISABLE)
  {
    assert_param(IS_ADC_REGULAR_DISC_NUMBER(hadc->Init.NbrOfDiscConversion));
  
    /* Enable the selected ADC regular discontinuous mode */
    hadc->Instance->CR1 |= (uint32_t)ADC_CR1_DISCEN;
    
    /* Set the number of channels to be converted in discontinuous mode */
    hadc->Instance->CR1 &= ~(ADC_CR1_DISCNUM);
    hadc->Instance->CR1 |=  ADC_CR1_DISCONTINUOUS(hadc->Init.NbrOfDiscConversion);
  }
  else
  {
    /* Disable the selected ADC regular discontinuous mode */
    hadc->Instance->CR1 &= ~(ADC_CR1_DISCEN);
  }
  
  /* Set ADC number of conversion */
  hadc->Instance->SQR1 &= ~(ADC_SQR1_L);
  hadc->Instance->SQR1 |=  ADC_SQR1(hadc->Init.NbrOfConversion);
  
  /* Enable or disable ADC DMA continuous request */
  hadc->Instance->CR2 &= ~(ADC_CR2_DDS);
  hadc->Instance->CR2 |= ADC_CR2_DMAContReq((uint32_t)hadc->Init.DMAContinuousRequests);
  
  /* Enable or disable ADC end of conversion selection */
  hadc->Instance->CR2 &= ~(ADC_CR2_EOCS);
  hadc->Instance->CR2 |= ADC_CR2_EOCSelection(hadc->Init.EOCSelection);
}

5. 結(jié)論

????????看過(guò)本文后,相信您對(duì)HAL庫(kù)的結(jié)構(gòu)有了初步了解,將來(lái)的編程中不再迷茫。要學(xué)習(xí)更多實(shí)戰(zhàn)經(jīng)驗(yàn),請(qǐng)關(guān)注博主,后續(xù)會(huì)陸續(xù)推出更多實(shí)戰(zhàn)經(jīng)驗(yàn),還請(qǐng)多多關(guān)注、批評(píng)指正!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-528641.html

到了這里,關(guān)于【STM32】HAL庫(kù)入門學(xué)習(xí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32單片機(jī)入門學(xué)習(xí)筆記——定時(shí)器TIM第一部分

    STM32單片機(jī)入門學(xué)習(xí)筆記——定時(shí)器TIM第一部分

    筆記整理自B站UP主 江科大自化協(xié) 教程 《STM32入門教程-2023持續(xù)更新中》 ,所用單片機(jī)也為教程推薦單片機(jī)。 第一部分:定時(shí)器基本定時(shí)的功能,定時(shí)器每隔這個(gè)時(shí)間產(chǎn)生一個(gè)中斷,來(lái)實(shí)現(xiàn)每隔一個(gè)固定時(shí)間執(zhí)行一段程序的目的,比如要做一個(gè)時(shí)鐘、秒表或者使用一些程序算

    2024年02月03日
    瀏覽(24)
  • 【STM32】HAL庫(kù)入門學(xué)習(xí)

    【STM32】HAL庫(kù)入門學(xué)習(xí)

    目錄 1. 前言 2. Hal庫(kù)特點(diǎn) 3. 獲取方法 3.1 下載 3.2 所在目錄 4. HAL庫(kù)用戶手冊(cè)結(jié)構(gòu) 4.1 用戶手冊(cè)的文檔 4.2 “ADC”外設(shè)解析 4.3 Exported Functions 4.4 Exported Types 4.5 Exported Constants 4.6 Exported Macros 4.6 Private Contants 4.7 Private Macros 4.8 Private Functions 5. 結(jié)論 ????????ST 為開(kāi)發(fā)者提供了非常方

    2024年02月12日
    瀏覽(20)
  • STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤

    STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤

    單片機(jī)型號(hào):STM32F103C8T6 開(kāi)發(fā)環(huán)境:Keil5 4種輸入模式 上拉輸入模式:在默認(rèn)狀態(tài)下(GPIO引腳無(wú)輸入),讀取得的GPIO引腳數(shù)據(jù)為1,高電平(與Vdd相連的為上拉電阻); 下拉輸入模式:在默認(rèn)狀態(tài)下(GPIO引腳無(wú)輸入),讀取得的GPIO引腳數(shù)據(jù)為0,低電平(與Vss相連的為下拉電

    2024年02月10日
    瀏覽(20)
  • 初學(xué)者入門:認(rèn)識(shí)STM32單片機(jī)

    初學(xué)者入門:認(rèn)識(shí)STM32單片機(jī)

    本教程含有較多專業(yè)詞匯,大部分時(shí)候,不完全理解并不影響繼續(xù)往下閱讀,大家只需要了解大致的概念即可。當(dāng)然,也鼓勵(lì)大家多查百度和多問(wèn)chatgpt,讓自己學(xué)會(huì)的更多。 什么是單片機(jī)? 單片機(jī),就是把中央處理器CPU、存儲(chǔ)器、等計(jì)算機(jī)的功能部件,和定時(shí)器、I/0(輸入

    2024年02月07日
    瀏覽(27)
  • 初識(shí)stm32單片機(jī)(小白入門指南)

    初識(shí)stm32單片機(jī)(小白入門指南)

    當(dāng)你看到這篇博客時(shí)不知道是否已經(jīng)了解過(guò)C51單片機(jī),如果你沒(méi)了解過(guò)它。這里有一份指南(C51教程)讓你入門單片機(jī),作為初學(xué)者從功能相對(duì)簡(jiǎn)單的單片機(jī)入手更有利于打好基礎(chǔ)。雖然stm32在性能上更為強(qiáng)大,但stm32開(kāi)發(fā)從它的配置和代碼量上來(lái)講比C51開(kāi)發(fā)更復(fù)雜,缺少點(diǎn)樂(lè)

    2024年02月17日
    瀏覽(21)
  • STM32單片機(jī)學(xué)習(xí)4--STM32控制八段碼

    STM32單片機(jī)學(xué)習(xí)4--STM32控制八段碼

    數(shù)碼管:實(shí)際上是多個(gè)LED按照一定順序排列,并加上遮罩所構(gòu)成的元件。 八段碼一般會(huì)引出9個(gè)引腳,其中7個(gè)引腳顯示數(shù)字(或某些字母),1個(gè)顯示小數(shù)點(diǎn),1個(gè)作為片選端。 根據(jù)連接方式的不同,數(shù)碼管分為 共陽(yáng) 和 共陰 。 共陽(yáng)在這端輸出低電平時(shí)點(diǎn)亮,高電平時(shí)會(huì)熄滅

    2024年01月23日
    瀏覽(27)
  • STM32/51單片機(jī)編程入門(點(diǎn)亮LED)

    STM32/51單片機(jī)編程入門(點(diǎn)亮LED)

    目錄 一、Proteus電路仿真軟件上的C51程序設(shè)計(jì)及仿真 1.原理圖繪制 2.Keil5上的51程序編寫 3.仿真 二、安裝mdk5軟件和stm32包,完成一個(gè)stm32的簡(jiǎn)單程序 1.mdk5軟件中編寫程序 2.stm32仿真程序調(diào)試 三、STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化設(shè)置的一般步驟

    2024年02月02日
    瀏覽(17)
  • 【32單片機(jī)學(xué)習(xí)】(11)STM32啟動(dòng)過(guò)程詳解

    【32單片機(jī)學(xué)習(xí)】(11)STM32啟動(dòng)過(guò)程詳解

    目錄 前言 一、系統(tǒng)架構(gòu) 二、啟動(dòng)配置 三、啟動(dòng)流程 1.首先復(fù)位MCU,獲取棧頂指針MSP和PC指針的內(nèi)容 2.根據(jù)PC的值找到復(fù)位中斷處理函數(shù)Reset_Handler 1.進(jìn)入中斷處理函數(shù)Reset_Handler 2.進(jìn)入SystemInit函數(shù) 3._main函數(shù) 3.進(jìn)入main函數(shù) 總結(jié) ?????????通過(guò)查閱官方手冊(cè)和對(duì)實(shí)際代碼進(jìn)行

    2024年02月08日
    瀏覽(25)
  • STM32單片機(jī) 超入門項(xiàng)目:流水燈(不同閃爍模式和速度)

    STM32單片機(jī) 超入門項(xiàng)目:流水燈(不同閃爍模式和速度)

    流水燈通過(guò)交替閃爍實(shí)現(xiàn)燈光流動(dòng)的效果,本篇將分析如何采用STM32單片機(jī)實(shí)現(xiàn)流水燈。 STM32單片機(jī)(STM32F103RCT6)、發(fā)光二極管 4(我用的是七彩快閃,用紅綠藍(lán)LDE自行搭配也可)、1k電阻 4、面包板飛線等自備。 打開(kāi)STM32CubeMX,選擇型號(hào)STM32F103RCT6,配置調(diào)試器PinoutConfigurati

    2023年04月09日
    瀏覽(25)
  • 單片機(jī)STM32看門狗詳解(嵌入式學(xué)習(xí))

    單片機(jī)STM32看門狗詳解(嵌入式學(xué)習(xí))

    單片機(jī)STM32的看門狗(Watchdog)是一種硬件定時(shí)器,用于監(jiān)控系統(tǒng)的運(yùn)行狀態(tài)并在出現(xiàn)故障或死鎖時(shí)采取措施以恢復(fù)正常操作??撮T狗的主要功能是定期檢查系統(tǒng)是否正常運(yùn)行,并在系統(tǒng)出現(xiàn)問(wèn)題時(shí)觸發(fā)復(fù)位操作。 STM32系列單片機(jī)通常配備了內(nèi)置的看門狗定時(shí)器(通常稱為獨(dú)立

    2024年02月13日
    瀏覽(33)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包