麻烦各位高手帮帮忙:
原来的PWM输出实验是用TIM3的CH2输出PWM波,控制LED0的亮暗,我改动了一下,想用TIM3的CH2控制LED0,TIm3的CH1控制LED1,即将板子的管脚PA7(CH2)与PA8(LED0)相连,PA6(CH1)与PD2(LED1)相连 部分程序如下:
void PWM_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;//tim3使能
GPIOA->CRH&=0xfffffff0;
GPIOA->CRH|=0x00000004;//设置PA8为浮空输入
GPIOD->CRL&=0xfffff0ff;//PD2
GPIOD->CRL|=0x00000400;//设置PD2为浮空输入
GPIOA->CRL&=0x00ffffff;
GPIOA->CRL|=0xbb000000;//PA7 PA6为复用功能输出
GPIOA->ODR|=1<<7;//A7,A6 上拉
GPIOA->ODR|=1<<6;
TIM3->ARR=arr;
TIM3-> SC=psc;
TIM3->CCMR1|=7<<12;
TIM3->CCMR1|=7<<4;
TIM3->CCMR1|=1<<11;
TIM3->CCMR1|=1<<3;
TIM3->CCER|=1<<4;
TIM3->CCER|=1<<0;
TIM3->CR1=0x8000;
TIM3->CR1|=0x01;
}
主程序:
int main(void)
{
u16 led0pwmval=0;
u16 led1pwmval=0;
u8 dir=1;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
LED_Init(); //初始化与LED连接的硬件接口
  WM_Init(900,0);//pwm初始化
while(1)
{
delay_ms(10);
if(dir){led0pwmval++;led1pwmval++;}
else{led0pwmval--;led1pwmval--;}
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
LED0_PWM_VAL=led0pwmval;
LED1_PWM_VAL=led1pwmval;
}
}
结果是只有LED0正常变化,LED1没有反应,为啥呢? 我测试了下将PA6 PA7分别接到LED0,都能观察到LED0的变化,说明CH1、CH2都产生了PWM输出,为啥他们接到LED1的时候灯就没反应呢??? |