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

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个回答

所属标签

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