新手入门
- 积分
- 10
- 金钱
- 10
- 注册时间
- 2016-11-9
- 在线时间
- 0 小时
|
新手第一帖,用寄存器TIM2完全映射。
void PWM_Init(u16 arr,u16 psc)
{
RCC->APB2ENR|=1<<3; //使能PORTB时钟
RCC->APB2ENR|=1<<0; //使能AFIO时钟
GPIOB->CRL&=0xFFFF0FFF; //PB3输出
GPIOB->CRL|=0x0000B000; //复用功能输出
GPIOB->CRH&=0xFFFF00FF; //PB10 PB11输出
GPIOB->CRH|=0x0000BB00; //复用功能输出
GPIOB->ODR|=1<<3; //PB3上拉
GPIOB->ODR|=1<<10; //PB10上拉
GPIOB->ODR|=1<<11; //PB11 拉
AFIO->MAPR|=3<<8; //TIM2的完全映射,不同的寄存器AFIO不同
delay_us(10);
RCC->APB1ENR|=1<<0; //TIM2时钟使能
delay_us(10);
TIM2->ARR=arr; //设定计数器自动重装值
TIM2->PSC=psc; //预分频器不分频
TIM2->CCMR1|=7<<4; //CH1 PWM2模式 PA15
TIM2->CCMR1|=1<<3; //CH1预装载使能
TIM2->CCMR1|=7<<12; //CH2 PWM2模式 PB3
TIM2->CCMR1|=1<<11; //CH2预装载使能
TIM2->CCMR2|=7<<4; //CH3 PWM2模式 PB10
TIM2->CCMR2|=1<<3; //CH3预装载使能
TIM2->CCMR2|=7<<12; //CH4 PWM2模式 PB11
TIM2->CCMR2|=1<<11; //CH4预装载使能
TIM2->CCER|=3<<0; //OC2 输出使能PA15 ,
TIM2->CCER|= 3<<4; //OC2 输出使能PB3
TIM2->CCER|= 3<<8; //OC2 输出使能PB10
TIM2->CCER|= 3<<12; //OC2 输出使能PB11
TIM2->CR1=0x0080; //ARPE使能
TIM2->CR1|=0x01; //使能定时器2
}
#define LED0_PWM_VAL TIM2->CCR1
#define LED1_PWM_VAL TIM2->CCR2
#define LED2_PWM_VAL TIM2->CCR3
#define LED3_PWM_VAL TIM2->CCR4
|
|