不知道为什么不能进入中断,谁能帮忙看看
///PWM的频率是由TIM_ARR确定的,占空比是由TIMx_CCRX寄存器确定的
#include "timer3_pwm.h"
#include "led.h"
//#include "sys.h"
u8 i=0;
u16 arr=17999;
u16 TIMER3_ARR[]={17999,21599,25199,28799,32399,35999};
void TIM3_PWM_Init(u16 psc)
{
RCC->APB1ENR|=1<<1; ///开始TIMER3时钟
RCC->APB2ENR|=1<<3; ///用到PB0,先使能PORTB的时钟
GPIOB->CRL&=0XFFfFFFF0; //先把对应位清零
GPIOB->CRL|=0X00000003; //配置PB0推挽输出
///CC2输入输出是由CCMR1配置的,不配置默认为0,就是输出
TIM3->ARR=arr; //设置重装值
TIM3-> SC=psc; //设置预分频,f/(psc+1),
TIM3->CCR3=2*arr; //占空比设为50%
TIM3->CCMR2|=7<<4; //CH3启用PWM模式2输出模式
TIM3->DIER|=1<<3; //允许捕获比较3中断
TIM3->CCMR2|=1<<3; //输出比较3预装载使能
TIM3->CCER|=1<<8; //CH3输出使能
TIM3->CR1&=1<<7; //使用自动重装载ARR
TIM3->CR1|=1<<0; //使能计数器
MY_NVIC_Init(1,3,TIM3_IRQn,2);
}
void TIM3_IRQHandler(void)
{
if(TIM3->SR&1<<3) //捕获比较3发生捕获事件
{
LED1=!LED1;
arr=TIMER3_ARR[i+1];///psc=17999,计数器的时钟周期为500us
if(i>5)
{
i=0;
}
}
TIM3->SR&=~(1<<0);
}
|