|
本帖最后由 liudingding 于 2023-3-15 18:01 编辑
如题,STM32F407定时器半懂不懂,写了个程序,想比较通道1中断,通道1比较数据20000,远大于计数器达到的上限,不可能匹配,怎么中断函数一直响应呢?void TIM1_CC_IRQHandler(void) 函数一直响应,
//TIM1 PWM部分初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM1_init(u16 arr,u16 psc) //通道4
{
arr--;
psc--;
RCC->APB2ENR|=1<<0; //使能定时器1的时钟 时钟84MHz
TIM1->CCR1 =20000; //比较1通道
arr=30;
psc=30;
TIM1->ARR =arr; //设定计数器自动重装值
TIM1->PSC =psc; //预分频器不分频
TIM1->CCMR1 |=6<<4; //CH1 PWM1模式
TIM1->CCMR1 |=1<<3; //CH1 预装载使能
TIM1->CR1 |=1<<7; //ARPE使能
TIM1->DIER |=3<<0; //允许更新中断 允许比较1中断
TIM1->CR1 |=0x01; //使能定时器1
TIM1->BDTR |=1<<15; //主输出使能 比其它计数器多的一条
MY_NVIC_Init(2,2,TIM1_UP_TIM10_IRQn,2); //
MY_NVIC_Init(1,2,TIM1_CC_IRQn,2); //
}
//定时器1中断服务程序
void TIM1_UP_TIM10_IRQHandler(void)
{
if(TIM1->SR&0x0001) //溢出中断
{
UH=0;
}
TIM1->SR&=~(1<<0); //清除中断标志位
}
void TIM1_CC_IRQHandler(void)
{
if(TIM1->SR&0x0002) //比较1中断
{
UH=0;
}
TIM1->SR&=~0x0002; //清除中断标志位
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|