STM32定时器通道独立启停控制
待测试
在main()中
ch1_open();
delay_ms(1000);
ch2_open();
delay_ms(1000);
ch3_open();
delay_ms(1000);
ch4_open();
delay_ms(1000);
在timer.c中添加了
//开启通道一,同时关闭通道二三四
void ch1_open(void)
{
TIM3->CCER|=(1<<1);
TIM3->CCER&=~(1<<4);
TIM3->CCER&=~(1<<8);
TIM3->CCER&=~(1<<12);
}
//开启通道二,同时关闭通道一三四
void ch2_open(void)
{
TIM3->CCER&=~(1<<1);
TIM3->CCER|=(1<<4);
TIM3->CCER&=~(1<<8);
TIM3->CCER&=~(1<<12);
}
//开启通道三,同时关闭通道一二四
void ch3_open(void)
{
TIM3->CCER&=~(1<<1);
TIM3->CCER&=~(1<<4);
TIM3->CCER|=(1<<8);
TIM3->CCER&=~(1<<12);
}
//开启通道四,同时关闭通道一二三
void ch4_open(void)
{
TIM3->CCER&=~(1<<1);
TIM3->CCER&=~(1<<4);
TIM3->CCER&=~(1<<8);
TIM3->CCER|=(1<<12);
}
网友的总结:
TIM2的4个通道想分别用在不同的事件处理中,但是似乎只有TIM_Cmd()这函数可以用,就是把所有通道同时开启或关闭, 而想用TIM_CCxCmd()来分别操作各个通道则完全不起作用。
比如说TIM_Cmd(TIM2, ENABLE); 了之后,再TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Disable);就没办法关闭这个通道,还是会不停的进定时器中断。如果TIM_Cmd(TIM2, DISABLE); 了,则TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Enable);
也没办法把这个通道开启。请问该怎么解决这种问题。。。
(网友1的程序中使用的是void TIM2_IRQHandler(void)定时器中断)
我的总结:如果你是和网友的使用方法一致,使用到了TIMx_IRQHandler这个中断函数,那么你单独关闭通道的函数则是 TIM_ITConfig(TIM2 , TIM_IT_CC1, ENABLE);或DISABLE,直接开中断或关中断。而如果你不是使用的这种中断,而是系统自动配置的时基单元的中断,那么单独关闭与开启一路通道则需要使用
TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Enable);或DISABLE