初级会员

- 积分
- 128
- 金钱
- 128
- 注册时间
- 2015-4-20
- 在线时间
- 27 小时
|
5金钱
本帖最后由 思否学否 于 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]
|
|