我想用TIM3的CH2通道(PC7)输出PWM控制LED的亮度,可是照着原子的PWM实验不行,PC输出不了PWM,因IC是STM32F103VET6,所以TIM3的CH2通道引脚为PC7,PC7同时也是TIM8 CH2的引脚,但我只开启TM3的,因为开启哪个就用哪个的吧??求高人解答,谢谢了!
原子的TIM3的CH2通道代码如下:
//TIM3 PWM部分
//正点原子@ALIENTEK
//2010/6/2
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void PWM_Init(u16 arr,u16 psc)
{
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<1; //TIM3时钟使能
GPIOA->CRH&=0XFFFFFFF0;//PA8输出
GPIOA->CRH|=0X00000004;//浮空输入
GPIOA->CRL&=0X0FFFFFFF;//PA7输出
GPIOA->CRL|=0XB0000000;//复用功能输出
GPIOA->ODR|=1<<7;//PA7上拉
TIM3->ARR=arr;//设定计数器自动重装值
TIM3-> SC=psc;//预分频器不分频
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCER|=1<<4; //OC2 输出使能
// TIM3->CR1=0x8000; //ARPE使能 这里原子搞错了,应该是下面这句,用缓冲与不用缓冲在精度上是有差别的。
TIM3->CR1=0x0080; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
}
我的代码只修改引脚而已,如下:
void PWM_Init(u16 arr,u16 psc)
{
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<1; //TIM3时钟使能
// GPIOA->CRH&=0XFFFFFFF0;//PA8输出
// GPIOA->CRH|=0X00000004;//浮空输入
GPIOC->CRL&=0X0FFFFFFF;//PC7输出
GPIOC->CRL|=0XB0000000;//复用功能输出
GPIOC->ODR|=1<<7;//PC7上拉
TIM3->ARR=arr;//设定计数器自动重装值
TIM3-> SC=psc;//预分频器不分频
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCER|=1<<4; //OC2 输出使能
TIM3->CR1=0x0080; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
}
|