15-HAL庫之定時器學習
阿新 • • 發佈:2018-12-17
1.基本定時器(TIM6/TIM7)
包含時鐘源(CK_INT),1個16位自動過載遞增計數器(CK_ARR),1個16位可程式設計預分頻器(CK_PSC),計數器暫存器(CK_CNT),觸發DAC的控制器組成。時鐘源為APB外設時鐘,定時事件生成事件主要由CK_PSC和CK_ARR兩個暫存器值覺得。例如需要1s延時,時鐘源週期為100us,設定CK_ARR為9999,CK_CNT從0開始到9999,總共技術10000次,即1s後更新事件和中斷標誌。
typedef struct { uint32_t Prescaler; //預分頻係數,0~65535,時鐘源經過該係數才是定時器時鐘 uint32_t CounterMode; //計數模式,向上或向下,基本定時器只有向上 uint32_t Period; //時鐘週期 uint32_t ClockDivision; //時鐘分頻,基本定時器無此功能 uint32_t RepetitionCounter; //重複計數,高階控制定時器所用 uint32_t AutoReloadPreload; //自動預裝載值 }TIM_Base_InitTypeDef;
應用例子如下:
void Basic_Tim_Config(void){ HAL_TIM_Base_MspInit(&Basic_Tim6); __HAL_RCC_TIM6_CLK_ENABLE(); Basic_Tim6.Instance=TIM6; Basic_Tim6.Init.Prescaler=10799; //TIM6頻率=APB2/(Prescaler+1)=10000Hz Basic_Tim6.Init.Period=9999; //累計10000個週期後產生中斷(1s) HAL_TIM_Base_Init(&Basic_Tim6); HAL_NVIC_SetPriority(TIM6_DAC_IRQn,1,1); HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); //優先順序配置 }
2.高階定時器(TIM1/TIM8)
包含1個16位自動過載計數器,由可程式設計預分頻器驅動,多達6個獨立通道(6路輸出控制,4路輸入捕獲),在基礎定時器的基礎上引入了外部引腳,可用於多種用途,例如測量輸入訊號的脈衝寬度(輸入捕獲),生成輸出波形(輸出比較,PWM等)。發生更新(計數器上溢/下溢、計數器初始化),突發事件,輸入捕獲,輸出比較時會生成中斷/DMA請求。
3.通用定時器
TIM2和TIM5是32位遞增/遞減/遞增遞減自動過載計數器,TIM3和TIM4是16位,4個獨立通道。
TIM9~TIM15是16位自動過載遞增計數器,2個獨立通道。