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