STM32定时器通道独立启停控制

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

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值