OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3508|回复: 3

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

[复制链接]

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-11-24
在线时间
32 小时
发表于 2016-12-13 15:58:05 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 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

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



最佳答案

查看完整内容[请看2#楼]

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_Fall ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2016-12-13
在线时间
19 小时
发表于 2016-12-13 15:58:06 | 显示全部楼层
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.关闭定时器是为了将之清零,重启。这样输入脉冲的起点与计数起点一致。最后计算脉冲长度的公式才正确。








回复

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-11-24
在线时间
32 小时
 楼主| 发表于 2016-12-13 17:59:57 | 显示全部楼层
tianxin19 发表于 2016-12-13 15:58
1.GPIO的模式是: GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
   你说的那行代码在复用模式 ...

关于第2个问题,我们是输入模式,配置上升/下降沿触发,与输入模式下数值好像不一样,你看下?所以关于这个问题,还是有疑问!
360桌面截图20161213175633.jpg
回复

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-11-24
在线时间
32 小时
 楼主| 发表于 2016-12-14 10:07:29 | 显示全部楼层
Gene 发表于 2016-12-13 17:59
关于第2个问题,我们是输入模式,配置上升/下降沿触发,与输入模式下数值好像不一样,你看下?所以关于这 ...

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-1 19:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表