本帖最后由 思否学否 于 2017-6-13 22:08 编辑
以前103 、407写输入捕捉程序,几路通道的输入捕捉都是仿原子例程写的,都不会出现什么问题,
今天在stm32f429上写输入捕捉程序。第一个输入捕捉没问题,但第二个通道输入捕捉总是导致程序挂了,,第二个输入捕捉换了几个定时器和通道还是这样,新库感觉用起来好麻烦啊
,请问429的库与以前的库有什么需要注意的吗?
初始化仿照原子的修改,中断处理按照以前老库的写法。代码如下:
[mw_shl_code=c,true]void TIM4_IRQnHandler(void)
{
if(__HAL_TIM_GET_FLAG(&TIM4_Handler, TIM_FLAG_UPDATE) != RESET)
{
if(__HAL_TIM_GET_IT_SOURCE(&TIM4_Handler, TIM_IT_UPDATE) !=RESET)
{
__HAL_TIM_CLEAR_IT(&TIM4_Handler, TIM_IT_UPDATE);
if((TIM4CH1_CAPTURE_STA&0X80)==0)//»1Î′3é1|2¶»ñ
{
if(TIM4CH1_CAPTURE_STA&0X40)//òѾ-2¶»ñμ½¸ßμçƽáË
{
if((TIM4CH1_CAPTURE_STA&0X3F)==0X3F)//¸ßμçƽì«3¤áË
{
TIM4CH1_CAPTURE_STA|=0X80; //±ê¼Ç3é1|2¶»ñáËò»′Î
TIM4CH1_CAPTURE_VAL=0XFFFFFFFF;
}else TIM4CH1_CAPTURE_STA++;
}
}
}
}
if(__HAL_TIM_GET_IT_SOURCE(&TIM4_Handler, TIM_IT_CC1) !=RESET)
{
__HAL_TIM_CLEAR_IT(&TIM4_Handler, TIM_IT_CC1);
TIM4_Handler.Channel = HAL_TIM_ACTIVE_CHANNEL_1;
if((TIM4CH1_CAPTURE_STA&0X80)==0)//»1Î′3é1|2¶»ñ
{
if(TIM4CH1_CAPTURE_STA&0X40) //2¶»ñμ½ò»¸öϽμÑØ
{
TIM4CH1_CAPTURE_STA|=0X80; //±ê¼Ç3é1|2¶»ñμ½ò»′θßμçƽÂö¿í
TIM4CH1_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&TIM4_Handler,TIM_CHANNEL_1);//»ñè¡μ±Ç°μÄ2¶»ñÖμ.
TIM_RESET_CAPTUREPOLARITY(&TIM4_Handler,TIM_CHANNEL_1); //ò»¶¨òaÏèÇå3yÔ-à′μÄéèÖã¡£¡
}else //»1Î′¿aê¼,μúò»′Î2¶»ñéÏéyÑØ
{
TIM4CH1_CAPTURE_STA=0; //Çå¿Õ
TIM4CH1_CAPTURE_VAL=0;
TIM4CH1_CAPTURE_STA|=0X40; //±ê¼Ç2¶»ñμ½áËéÏéyÑØ
// __HAL_TIM_DISABLE(&TIM3_Handler); //1رն¨ê±Æ÷5
__HAL_TIM_SET_COUNTER(&TIM4_Handler,0);
TIM_RESET_CAPTUREPOLARITY(&TIM4_Handler,TIM_CHANNEL_1); //ò»¶¨òaÏèÇå3yÔ-à′μÄéèÖã¡£¡
// __HAL_TIM_ENABLE(&TIM3_Handler);//ê1Äü¶¨ê±Æ÷5
}
}
/* Output compare event */
TIM4_Handler.Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
}
}[/mw_shl_code]
原子哥,我这个也是,定时器5输入捕获是您给的,但是加上另外一个定时器的输入捕获之后,定时器5正常,另外一个定时器就一直触发。。。
一周热门 更多>