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