STM32自帶PWM輸出實(shí)驗(yàn)
#include "sys.h"
#include "delay.h"
#include "usart.h"
#define LED0_val TIM3->CCR2
#include "delay.h"
#include "usart.h"
#define LED0_val TIM3->CCR2
void PWM_init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1; //TIM3時(shí)鐘使能
GPIOA->CRH&=0xfffffff0; //PA8
GPIOA->CRH|=0x00000004; //PA8 浮空輸入
GPIOA->CRL&=0x0fffffff;
GPIOA->CRL|=0xB0000000; //PA7復(fù)用輸出
GPIOA->ODR|=1<<7; //PA7上啦
TIM3->ARR=arr; //設(shè)置重裝載值
TIM3->PSC=psc; //設(shè)置預(yù)分頻系數(shù)
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
TIM3->CCMR1|=1<<11; //CH2預(yù)裝載使能
TIM3->CCER|=1<<4; //OC2輸出使能
TIM3->CR1|=0x0080; //ARPE使能
TIM3->CR1|=0x01; //使能定時(shí)器3
}
int main(void)
{
u16 pwm=0;
u8 dir=1;
Stm32_Clock_Init(9);
delay_init(72);
uart_init(72,9600);
PWM_init(900,0); //頻率72000/900 80KHZ
while(1)
{
delay_ms(10);
if(dir)pwm++;
else pwm--;
if(pwm>300)dir=0;
if(pwm==0)dir=1;
LED0_val=pwm;
}
}
void PWM_init(u16 arr,u16 psc)函數(shù)解析:
GPIOA->CRL&=0x0fffffff;
GPIOA->CRL|=0xB0000000; //PA7復(fù)用輸出 因?yàn)門IM3_CH2 通道是I/O口復(fù)用的形式連接到PA7上的
TIM3->ARR; //設(shè)置自動(dòng)重裝載值
TIM3->PSC; //設(shè)置分頻系數(shù)
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
CCMR1用于控制CH1 和CH2通道
由于7=0x111;
int main(void)
{
u16 pwm=0;
u8 dir=1;
Stm32_Clock_Init(9);
delay_init(72);
uart_init(72,9600);
PWM_init(900,0); //頻率72000/900 80KHZ
while(1)
{
delay_ms(10);
if(dir)pwm++;
else pwm--;
if(pwm>300)dir=0;
if(pwm==0)dir=1;
LED0_val=pwm;
}
}
void PWM_init(u16 arr,u16 psc)函數(shù)解析:
GPIOA->CRL&=0x0fffffff;
GPIOA->CRL|=0xB0000000; //PA7復(fù)用輸出 因?yàn)門IM3_CH2 通道是I/O口復(fù)用的形式連接到PA7上的
TIM3->ARR; //設(shè)置自動(dòng)重裝載值
TIM3->PSC; //設(shè)置分頻系數(shù)
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
CCMR1用于控制CH1 和CH2通道
由于7=0x111;
所以O(shè)C1M[2:0]為
本文引用地址:http://m.butianyuan.cn/article/201611/323885.htm111:PWM模式2- 在向上計(jì)數(shù)時(shí),一旦TIMx_CNTTIMx_CCR1時(shí)通道1為有效電平,否則為無效電平。
默認(rèn)為高電平有效
計(jì)數(shù)模式是 TIM3_CR1 中 位4決定
位4 0:計(jì)數(shù)器向上計(jì)數(shù); 1:計(jì)數(shù)器向下計(jì)數(shù)。
默認(rèn)為向上計(jì)數(shù)模式
定時(shí)器的值從0-----> TIM->ARR 到自動(dòng)裝載值 循環(huán)變化
//---------------------------------------------------------------------------------------
CC2E:輸入/捕獲1輸出使能 (Capture/Compare 1 output enable)
CC2通道配置為輸出: 0: 關(guān)閉- OC1禁止輸出。 1: 開啟- OC2信號輸出到對應(yīng)的輸出引腳。
CC2通道配置為輸入: 該位決定了計(jì)數(shù)器的值是否能捕獲入TIMx_CCR1寄存器。 0:捕獲禁止; 0:捕獲使能。
TIM3->CR1|=0x0080; //ARPE使能
ARPE:自動(dòng)重裝載預(yù)裝載允許位 (Auto-reload preload enable)
0:TIMx_ARR寄存器沒有緩沖; 1:TIMx_ARR寄存器被裝入緩沖器。
//
默認(rèn)為高電平有效
計(jì)數(shù)模式是 TIM3_CR1 中 位4決定
位4 0:計(jì)數(shù)器向上計(jì)數(shù); 1:計(jì)數(shù)器向下計(jì)數(shù)。
默認(rèn)為向上計(jì)數(shù)模式
定時(shí)器的值從0-----> TIM->ARR 到自動(dòng)裝載值 循環(huán)變化
//---------------------------------------------------------------------------------------
TIM3->CCMR1|=1<<11; //CH2預(yù)裝載使能
TIM3->CCER|=1<<4; //OC2輸出使能
CC2E:輸入/捕獲1輸出使能 (Capture/Compare 1 output enable)
CC2通道配置為輸出: 0: 關(guān)閉- OC1禁止輸出。 1: 開啟- OC2信號輸出到對應(yīng)的輸出引腳。
CC2通道配置為輸入: 該位決定了計(jì)數(shù)器的值是否能捕獲入TIMx_CCR1寄存器。 0:捕獲禁止; 0:捕獲使能。
TIM3->CR1|=0x0080; //ARPE使能
ARPE:自動(dòng)重裝載預(yù)裝載允許位 (Auto-reload preload enable)
0:TIMx_ARR寄存器沒有緩沖; 1:TIMx_ARR寄存器被裝入緩沖器。
//
評論