STM32HAL庫使用總結(持續更新)


1、外設初始化

  • 設置硬件無關參數,調用初始化函數,比如:
     1 TIM_HandleTypeDef TIM3_Handler;      //定時器句柄 
     2 
     3 //通用定時器3中斷初始化
     4 //arr:自動重裝值。
     5 //psc:時鍾預分頻數
     6 //定時器溢出時間計算方法:Tout=((arr+1)*(psc+1))/Ft us.
     7 //Ft=定時器工作頻率,單位:Mhz
     8 //這里使用的是定時器3!(定時器3掛在APB1上,時鍾為HCLK/2)
     9 void TIM3_Init(u16 arr,u16 psc)
    10 {  
    11     TIM3_Handler.Instance=TIM3;                          //通用定時器3
    12     TIM3_Handler.Init.Prescaler=psc;                     //分頻系數
    13     TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上計數器
    14     TIM3_Handler.Init.Period=arr;                        //自動裝載值
    15     TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//時鍾分頻因子
    16     HAL_TIM_Base_Init(&TIM3_Handler);
    17     
    18     HAL_TIM_Base_Start_IT(&TIM3_Handler); //使能定時器3和定時器3更新中斷:TIM_IT_UPDATE   
    19 }
    設置參數
  • 按需重寫MSP函數,如:
     1 //定時器底冊驅動,開啟時鍾,設置中斷優先級
     2 //此函數會被HAL_TIM_Base_Init()函數調用
     3 void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
     4 {
     5     if(htim->Instance==TIM3)
     6     {
     7         __HAL_RCC_TIM3_CLK_ENABLE();            //使能TIM3時鍾
     8         HAL_NVIC_SetPriority(TIM3_IRQn,1,3);    //設置中斷優先級,搶占優先級1,子優先級3
     9         HAL_NVIC_EnableIRQ(TIM3_IRQn);          //開啟ITM3中斷   
    10     }
    11 }
    重寫MSP函數

2、中斷使用

  • 中斷服務函數中調用HAL中斷函數,該函數可能會自動清理中斷標志位,用CubeMX生成的中斷服務函數放在stm32f..._it.c里面,代碼示例
1 //定時器3中斷服務函數
2 void TIM3_IRQHandler(void)
3 {
4     HAL_TIM_IRQHandler(&TIM3_Handler);
5 }
中斷服務函數
  • 重寫中斷回調函數,回調函數類型可以在.h文件查看,如定時器的更新中斷回調函數
    1 //回調函數,定時器中斷服務函數調用的HAL庫函數調用
    2 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    3 {
    4     if(htim==(&TIM3_Handler))
    5     {
    6         LED1=!LED1;        //LED1反轉
    7     }
    8 }
    中斷回調函數

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM