关于F407例程“第十五章 驶入捕获实验”的3点疑问

2019-07-20 18:09发布

本帖最后由 Gene 于 2016-12-13 17:14 编辑

在阅读“第十五章 驶入捕获实验”的过程中,有3个疑问,想请教一下大家:
1.初始化函数82行:GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
既然是输入捕获,GPIO为什么配置成输出?不是应该配置为输入吗?

2.中断服务函数中147行:“TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获”
我查看固件手册以及“stm32f4xx_tim.h”中关于函数的说明,第二个形参“TIM_OCPolarity”只有2个可选值(见下面),
  * @param  TIM_OCPolarity: specifies the OC1 Polarity
  *          This parameter can be one of the following values:
  *            @arg TIM_OCPolarity_High: Output Compare active high
  *            @arg TIM_OCPolarity_Low: Output Compare active low

但是例程中有TIM_OCPolarity却取值“TIM_ICPolarity_Rising”,那请问关于库函数TIM_OC1PolarityConfig的定义,哪里有更详细的说明?

3.中断服务函数中150~156行:
TIM5CH1_CAPTURE_STA=0;                        //清空
TIM5CH1_CAPTURE_VAL=0;
TIM5CH1_CAPTURE_STA|=0X40;                //标记捕获到了上升沿
TIM_Cmd(TIM5,DISABLE );         //关闭定时器5
TIM_SetCounter(TIM5,0);
TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);                //CC1P=1 设置为下降沿捕获
TIM_Cmd(TIM5,ENABLE );         //使能定时器5

这里为什么要关闭定时器?



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
tianxin19
1楼-- · 2019-07-20 18:39
1.GPIO的模式是: GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
   你说的那行代码在复用模式下应该是不起作用的。不必理睬。

2.在“stm32f4xx_tim.h”中有如下定义   #define TIM_OCPolarity_High                ((uint16_t)0x0000)
   #define TIM_OCPolarity_Low                 ((uint16_t)0x0002)

   #define  TIM_ICPolarity_Rising             ((uint16_t)0x0000)
   #define  TIM_ICPolarity_Falling            ((uint16_t)0x0002)


   所以虽然名字不同,但代表的是同一个u16值。对应函数参数定义都适用。/void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)


3.关闭定时器是为了将之清零,重启。这样输入脉冲的起点与计数起点一致。最后计算脉冲长度的公式才正确。








Gene
2楼-- · 2019-07-20 21:32
 精彩回答 2  元偷偷看……
Gene
3楼-- · 2019-07-21 00:56
Gene 发表于 2016-12-13 17:59
关于第2个问题,我们是输入模式,配置上升/下降沿触发,与输入模式下数值好像不一样,你看下?所以关于这 ...

单独的上升沿触发和下降沿触发时,CC1NP都是0,这样配置时,与输出模式下高电平/低电平设置的值是一样的,所以代码中才直接使用输出时的高电平和低电平用于设置输入模式的时的边沿检测;如果是双沿触发,CC1NP时,就不能使用输出模式时的设置方式。原理应该就是这样!

一周热门 更多>