你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 输入捕获功能

[复制链接]
STMCU 发布时间:2020-9-10 12:27
01 STM32捕获功能
从STM32的定时器框图中看
1.png


从上图可以看出定时器1共有4个输入捕获通道。

下文以定时器1的捕获通道2为例讲解。

首先确定下对应的GPIO,从STM32F207数据手册的Alternatefunction mapping看出,定时器1通道2对应的GPIO有PA9和PE11,下文将使用PE11。

2.png
02 输入捕获过程

输入阶段采样对应的对输入TIx,去产生滤波后的信号TIxF。然后极性选择边沿检测器产生一个信号(TIxFPx),这个信号可以被用于服务模式控制器的触发输入或在作为捕获命令。在捕获寄存器前被预分频。

3.png

输出阶段产生一个中间波形,被用于参考:OCxRef(高电平有效)。链地末尾末尾决定极0性。捕获/比较通道1 主电路。

①处主要是设置输入捕获滤波器,输入阶段采样对应的对输入TIx,去产生滤波后的信号TIxF。一般应用场景不做滤波处理,设置TIMx_CCMR1的ICF[3:0]=0000,只要采集到上升沿,就触发捕获。

②处主要是设置输入捕获极性,设置TIMx_CCER的CC1P或CC1NP位,如果通道配置为输出,为0表示高电平有效,为1表示低电平有效;如果配置成输入模式,该位选择是IC1还是IC1的反相信号作为触发或捕获信号。为0,表示不反相,为1表示反相。

③处设置输入捕获映射通道,设置TIMx_CCMR1的CC1S[1:0]位,这2位定义通道的方向(输入/输出),及输入脚的选择:

0o:CC1通道被配置为输出;
01:CC1通道被配置为输入,IC1映射在Tl1上;
10: CC1通道被配置为输入,IC1映射在TI2上;
11:CC1通道被配置为输入,IC1映射在TRC上。此模式仅工作在内部触发器输入被选中时(由TIMx_SMCR寄存器的TS位选择)。

④处设置输入捕获分频器,TIMx_CCMR1的ICPS[1:0]位和TIMx_CCER的CC1E位。

TIMx_CCMR1的ICPS[1:0]这2位定义了CC1输入(IC1)的预分频系数。一旦CC1E='O(TIMx_CCER寄存器中),则预分频器复位。

00:无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获;
01:每2个事件触发一次捕获;
10:每4个事件触发一次捕获;
11:每8个事件触发一次捕获。

TIMx_CCER的CC1E位

CC1通道配置为输出:

0:关闭一OC1禁止输出。
1:开启一OC1信号输出到对应的输出引脚。

CC1通道配置为输入:

该位决定了计数器的值是否能捕获入TIMx_CCR1寄存器。

0:捕获禁止;
0:捕获使能。

最后我们还需要设置中断,使系统快速响应输入捕获信号,主要是这只TIMx_DIER寄存器,如下:

4.png

使能允许更新中断和通道2中断

5.png
03 代码配置
设置GPIO复用


  1. /* TIM1 channel 2 pin (PE.11) configuration*/
  2. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  3. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF;
  4. GPIO_InitStructure.GPIO_Speed =GPIO_Speed_100MHz;
  5. GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;
  6. GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL;
  7. GPIO_Init(GPIOE, &GPIO_InitStructure);

  8. /*Connect TIM pins to AF2 */
  9. GPIO_PinAFConfig(GPIOE,GPIO_PinSource11, GPIO_AF_TIM1);
复制代码


设定定时基础功能

  1. /* Time base configuration */
  2. TIM_TimeBaseStructure.TIM_Period =0XFFFF;
  3. TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t)((SystemCoreClock) / 1000000) -1;
  4. TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;
  5. TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;

  6. TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
复制代码


配置通道2


  1. TIM_ICInitStructure.TIM_Channel =TIM_Channel_2;
  2. TIM_ICInitStructure.TIM_ICPolarity =TIM_ICPolarity_Falling;
  3. TIM_ICInitStructure.TIM_ICSelection =TIM_ICSelection_DirectTI;
  4. TIM_ICInitStructure.TIM_ICPrescaler =TIM_ICPSC_DIV1;
  5. TIM_ICInitStructure.TIM_ICFilter =0x0;

  6. TIM_ICInit(TIM1, &TIM_ICInitStructure);
复制代码


使能中断

  1. /* Enable the TIM1 global Interrupt*/
  2. NVIC_InitStructure.NVIC_IRQChannel =TIM1_CC_IRQn;
  3. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;
  4. NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;
  5. NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
  6. NVIC_Init(&NVIC_InitStructure);

  7. NVIC_InitStructure.NVIC_IRQChannel =TIM1_UP_TIM10_IRQn;
  8. NVIC_InitStructure.NVIC_IRQChannelSubPriority= 2;
  9. NVIC_Init(&NVIC_InitStructure);

  10. /* Enablethe CC2 Interrupt Request */
  11. TIM_ITConfig(TIM1,TIM_IT_CC2|TIM_IT_Update, ENABLE);
复制代码


使能定时器1


  1. /* TIM enable counter */
  2. TIM_Cmd(TIM1, ENABLE);
复制代码


下载代码验证测试

6.gif






收藏 1 评论0 发布时间:2020-9-10 12:27

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版