请问TIM2通道中断怎么应用,与TIM的中断有什么区别? 【...
做了一块灯板,分很多组,每组灯亮暗都是独立的;想用TIM2每个通道控制一组灯的亮暗(不知能否行得通),4个通道控制4组灯,采用中断方式,就是通道1中断一次,A组灯亮,再中断,A组灯来,(亮暗间隔时间可以不同),几个问题请教各位大侠:1、TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET这句是来判断通道中断的吧?每次通道中断 时,TIM2也发生中断 TIM2_IRQHandler事件吧? 通道中断与TIM2中断这两个是什么关系?
2、通道中断用不用加上
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4, ENABLE);
3、”捕获“是不是就是把TIM2计数寄存器的数填到捕获寄存器中?
亮暗闪几下后就不闪了,不知为什么。
CCR1_Val来调节亮暗时间。
TIM的设置程序、中断程序,,如下:
/* TIM2设置时基单元 */ // CCR:捕获/比较寄存器
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Prescaler = 35999; // 0.5ms
TIM_TimeBaseStructure.TIM_Period =TIM2_ARR; //它对应TIM2_ARR(自动装载寄存器
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //ClockDivision是对CKD位进行设置的,
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* Prescaler configuration */
// TIM_PrescalerConfig(TIM2 , PrescalerValue, TIM_PSCReloadMode_Immediate);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;//选择定时器模式,TIM 输出比较时间模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
/* TIM2第一通道设置 */
// TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; //配置通道1
TIM_OCInitStructure.TIM_Pulse = CCR1_Val; //装入当前捕获/比较2 TIM2_CCR1寄存器的值(预装载值)。
//通用寄存器的四个通道,每一个通道相当于一个中断触发源,可以设置一个计数值,当TIM计数值和此计数值相等时,触发中断。
//通道1 占空比=TIM2_CCR1/(TIM2_ARR+1)X100%
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //对CCER中CCxP的操作
TIM_OC1Init(TIM2, &TIM_OCInitStructure); //将配置应用
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);
/*第二通道设置 */
TIM_OCInitStructure.TIM_Pulse = CCR2_Val; //这个是将CCR2_Val的值送到TMI2_CCR2中
TIM_OC2Init(TIM2, &TIM_OCInitStructure); //将配置应用
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Disable);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//开启中断,TIM 中断源
TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4, ENABLE);; //开启中断 捕获/比较1、2、3、4 中断源
/* TIM2 enable counter */
TIM_Cmd(TIM2, ENABLE);
//最后两个步骤,一个是管理时钟的,一个是管理中断的。
中断程序:
void TIM2_IRQHandler(void)
{
TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);//清除掉中断标志位
<span style="font-size: small;">if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) // TIM_IT_CC1: TIM 捕获/比较1 中断源
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
capture = TIM_GetCapture1(TIM2); //获得输入捕获1 的值,即计数器中的计数值
if (capture
RE:请问TIM2通道中断怎么应用,与TIM的中断有什么区别? 【悬赏问答】
不明白为什么一定要用通道中断?有什么特殊的目的?感觉就用TIM2的中断就行了,每次中断时切换一组灯,而每组灯的亮暗在中断中调整TIM2的四个通道的PWM输出占空比就可以了。RE:请问TIM2通道中断怎么应用,与TIM的中断有什么区别? 【悬赏问答】
1.TIM 中断跟通道中断 只是跟定时器 比较的 寄存器不一样而已,TIN中断一般就是说溢出中断 别的通道中断可以说是匹配中断。2. 那两个语句是定时器的总体配置 是需要的。
3. 捕获的意思 其实就是一个边沿触发中断事件,并是你说的意思。
回复:请问TIM2通道中断怎么应用,与TIM的中断有什么区别? 【悬赏问答】
附件在哪里?:lol
页:
[1]