通用定時器(以下以通用定時器3,通道3 為例):
第一步:開啟時鐘使能
RCC->APB1ENR:1 位 //開啟定時器3 時鐘使能
第二步:設置定時器分頻與裝載計數值(以一周期 1ms)
TIM3->PSC = 7199; //系統(tǒng)時鐘為 72M 經 (7199+1) 分頻后,定時器時鐘為 10k(一周期為0.1ms)
TIM3->ARR = 9; //計數周期為 0.1ms * (9+1) = 1ms
第三步:使能定時器
TIM3->CR1:0 位 //開啟計數器,開始計時
第四步:溢出中斷使能
TIM3->DIER:0 位 //開啟溢出中斷
第五步:
void TIM3_IRQHandler(void);
利用通用定時器輸出 PWM(以下以通用定時器3,通道3 為例):
第一步:開啟時鐘使能
RCC->APB1ENR:1 位 //開啟定時器3 時鐘使能
RCC->APB2ENR:3 位 //定時器3 對應 PB0 口,開啟 GPIOB 時鐘使能
RCC->APB2ENR:0 位 //開啟復用功能時鐘使能
第二步:配置 PB0 口模式
GPIOB->CRL &= 0xFFFFFFF0; //清空 PB0 模式配置
GPIOB->CRL |= 0x0000000B; //復用推挽輸出
GPIOB->ODR |= 0x00000001; //拉高
第三步:設置定時器分頻與裝載計數值(以一周期 1ms)
TIM3->PSC = 7199; //系統(tǒng)時鐘為 72M 經 (7199+1) 分頻后,定時器時鐘為 10k(一周期為0.1ms)
TIM3->ARR = 9; //計數周期為 0.1ms * (9+1) = 1ms
TIM3->CR1:7 位 //1 當修改TIM3->ARR 時會馬上修改 ARR,0 會在下一個計數周期才修改
第四步:設置 PWM 輸出模式,有效電平為高
TIM3->CCMR2 &= ~(7<<4); //清空定時器3,通道3 的PWM輸出模式
TIM3->CCMR2 |= 6<<4; //設置定時器3,通道3 為 PWM模式1
TIM3->CCER: 1 位 //0 有效電平為高,1 有效電平為低
第五步:設置高電平占空比(CCRx,x 代表該定時器的通道)
TIM3->CCR3 //當 TIM3->CNT 計數器當前值小于 TIM3->CRR3 時,輸出有效電平
第六步:使能計數器
TIM3->CR1: 0 位 //使能計數器





