输入捕获

过程

​ 在输入捕获模式下,信号从TIx输入,一共有四个输入口,以TI1为例,经过滤波器和边沿检测器后输出TI1FPx两路信号,该信号可以直接从IC1从输入,也可以从IC2输入,此处以IC1为例,当ICx信号检测到跳变沿时,会锁存计数器的值,并把SR寄存器中的捕获比较中断位置1,并可发出中断或DMA请求,当读取CCR1的值后,相应的SR中断捕获比较中断位会自动清零,当下一次捕获事件发生时,如果上一次的CCR1值还未被读取,则会将重复捕获寄存器(SR中的CC1OF)置1,可通过软件置0。

还是以从TI1输入并在出现上升沿时将值捕获到CCR1。

  1. 选择有效输入,如上图,从IC1输入的信号对应着CCR1寄存器,要将值捕获到CCR1寄存器就得把信号作为IC1信号输入,由图知,TI1FP1和TI2FP1可以作为IC1信号输入,但我们的目的是从TI1输入,故只能选择TI1FP1信号,即需要配置从TI1输入。

    具体需要将CCMR1(捕获比较模式寄存器1,控制1,2通道,对应的CCMR2控制3,4通道)寄存器中的CC1S(捕获比较1选择,即控制1通道信号输入的位)寄存器写入01,将会将通道配置成输入,并将IC1映射到TI1上。

  2. 根据连接到定时器的信号,对所需的输入滤波时间进行编程。这个我平时也没怎么用,

  3. 选择有效边沿。配置了了从哪个通道传入数据,也要配置了在什么时候捕获数据,这需要对CCER寄存器中的CC1NP与CC1P位进行配置,有四种选择分别是上升沿捕获(00),下降沿捕获(01),上下沿均触发(11),保留状态(10),此处我们选择上升沿即(00)。

  4. 禁止CCRx预装载寄存器。使可以随时向CCR1写入数据,写入后立刻生效,需要配置CCMR1寄存器的IC1PSC位为(00)。

  5. 捕获使能。就好似配置一个GPIO口一样,要先配置他的速度,端口等等,最后一定要将GPIO使能。本处也是一样,为了允许将计数器的值捕获到捕获寄存器中,配置完捕获之后要将捕获使能,即将CCER寄存器的CCIE位(捕获比较1输出使能)置1。

  6. 生成中断/DMA请求(可选)。这可以将DIER寄存器中的CC1IE位置1来使能中断请求,将CC1DE位置来使能DMA请求。如果要使用中断的话还需要初始化NVIC结构体,编写中断服务函数等,此处不再介绍,要注意一点就是,TIM1产生的捕获比较中断就只有TIM1_CC_IRQn一个,通道1,2,3,4产生的都是这个中断,要区分各个中断必须得在中断服务程序中通过SR(状态寄存器)中的中断标志位进行判断。
    

PWM输入模式

​ PWM学名为脉冲宽度调制,一般可以用来调节电机转速以及控制LED等亮暗等等。

​ PWM输入模式是普通输入模式的特例,区别在于,对于PWM信号,一般都要测量他的周期和占空比,而这不是仅仅通过一个通道就可以测量的,所以说一般都要使用两个通道对PWM信号进行测量,而且这两个通道一个是在上升沿进行捕获而另一个是在下降沿进行捕获,如下图,IC2在下降沿捕获,而IC1在上升沿捕获。在下图中,IC1捕获的值加1乘以时钟周期即为PWM信号的周期,IC2捕获的值加一与IC1捕获的值加一的比值即为占空比。

​ 另外,对于PWM输入模式,我们只能使用TIMx_CH1/TIMx_CH2信号,因为只有TI1FP1和TI2FP2连接到了从模式控制器,而后续过程中我们是需要使用从模式控制器的,故只能从这两个通道输入信号。如下图所示

下面主要介绍一下配置过程,以测量从TI1输入的的PWM信号为例。

  1. 选择有效输入,类似于普通输入捕获的配置,对于CCR1寄存器,向CCMR1寄存器的CC1S写入(01),选择TI1;对于CCR2寄存器,向CCMR1寄存器的CC2S写入(01),选择TI1。

  2. 确定有效边沿,向CCER寄存器中断CC1P与CC1NP写入0,表示上升沿有效,相应地,向CCER寄存器中断CC2P与CC2NP写入1,表示下降沿有效。

  3. 选择有效触发输入,我们一般把用于测量周期的信号配置为触发输入,此处我们使用TI1FP1用于周期测量,故将SMCR寄存器的TS位配置为101(即为TI1FP1)。

  4. 将从模式控制器配置为复位模式,即将SMCR寄存器的SMS位配置为100(复位模式),即表示当我们所选的触发信号(结合步骤3)出现上升沿时,会重新初始化计数器并生成一个寄存器更新事件,从此时,计时器从0开始计数,当再次出现上升沿、下降沿时,相应的定时器值被捕获到CCR1,CCR2寄存器,通过这两个寄存器的值,既可以计算PWM信号的周期与占空比。

  5. 使能捕获,如普通捕获输入一样,配置的最后要使能捕获,即将CCER寄存器的CC1E、CC2E置1。

    具体代码可参考如下

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_PinAFConfig(ttj_GPIO_PORT, ttj_GPIO_SOU, ttj_GPIO_AF);
//基本的GPIO配置,
GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType =  GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin = ttj_GPIO_PIN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
GPIO_Init(ttj_GPIO_PORT, &GPIO_InitStructure);
//配置时基-基本的时钟配置,和配置普通的定时器一样
TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;
TIM_ICInitTypeDef   TIM_ICInitStructure;
ttj_TIM_ClockCmd(ttj_TIM_Clock, ENABLE);//开启时钟
//初始化时基单元
TIM_TimeBaseInitStructure.TIM_ClockDivision =  TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period  = ttj_TIM_PERIOD;
TIM_TimeBaseInitStructure.TIM_Prescaler = ttj_TIM_PSC;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter  = 0;
TIM_TimeBaseInit(ttj_TIM, &TIM_TimeBaseInitStructure);//初始化输入捕获比较结构体  配置了IC1的,IC2的可通过程序自动配置。
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;  //通过一通道输入数据
TIM_ICInitStructure.TIM_ICFilter =  0X00;
TIM_ICInitStructure.TIM_ICPolarity  = TIM_ICPolarity_Rising; //上升沿捕获,IC2相反为falling,这配置的就是上述配置pwm流程的第二步
TIM_ICInitStructure.TIM_ICPrescaler =  TIM_ICPSC_DIV1;  //一般都不分频,不滤波
TIM_ICInitStructure.TIM_ICSelection  = TIM_ICSelection_DirectTI;//直连,映射到IC1,IC2相反,为非直连TIM_PWMIConfig(ttj_TIM, &TIM_ICInitStructure);//使用PWM捕获时才使用此语句,使用该语句后,只用配置一个输入捕获,另一个自动配置,//选择有效输入端(PWM模式可用) 选择的即为周期,另一个即为高电平时间,对应的是上述配置pwm流程的第三步,
TIM_SelectInputTrigger(ttj_TIM, TIM_TS_TI1FP1);
//配置为主从复位模式(PWM模式可用),在有效输入端出现上升沿时让定时器归零并生成更新事件,记住,还要生成更新事件!!也会产生更新中断。对应的是上述配置pwm流程的第四步,
TIM_SelectSlaveMode(ttj_TIM, TIM_SlaveMode_Reset);
TIM_SelectMasterSlaveMode(ttj_TIM, TIM_MasterSlaveMode_Enable); //这步有什么用具体也没看懂
//开启中断
TIM_ITConfig(ttj_TIM, TIM_IT_Update|TIM_IT_CC1 | TIM_IT_CC2, ENABLE);
TIM_ClearFlag(ttj_TIM, TIM_FLAG_Update|TIM_FLAG_CC1 |TIM_FLAG_CC2);
//使能定时器
TIM_Cmd(ttj_TIM, ENABLE);

至此,时钟配置完成。

stm32时钟(2)输入捕获以及PWM输入捕获相关推荐

  1. stm32 PWM输入捕获

    普通的输入捕获,可使用定时器的四个通道,一路捕获占用一个捕获寄存器. PWM输入,只能使用两个通道,通道1和通道2. 一路PWM输入占用两个捕获寄存器,一个捕获周期,一个捕获占空比. 这里,用通用定时 ...

  2. STM32 输入捕获 测量频率 PWM占空比

    看了网上关于STM32输入捕获的资料,有几篇介绍的很不错,但是内容上还有一点问题,稍加修改,大家可以参考一下. 重要概念理解(对于理解输入捕获功能很重要,特别看了数据手册CCR1\CCR2\CCR3\ ...

  3. STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)

    目录 定时器 8个定时器 定时器功能 定时器中断 常用通用定时器的寄存器 定时器中断实验目的: 定时器库函数及步骤 实验程序讲解 PWM 简介 STM32 PWM工作过程 PWM模式1 与 PWM模式 ...

  4. STM32遥控方法SONY PS2 、航模,STM32定时器PWM输入捕获航模接收机

    PS2接线: 买家会给你程序和说明: 接线: GND接STM32 GND VCC接STM32 VCC DAT接 STM32 PB12 CMD接STM32 PB13 CS接 STM32 PB14 CLK ...

  5. 华大半导体HC32F4A0笔记(一),PWM输入捕获,使用TIM6

    一.启动时钟 PWC_Fcg2PeriphClockCmd(PWC_FCG2_TMR6_x, Enable); TMR6对应FCG2,根据PWM输入引脚来确定是TMR6_x(本例为TMR6_2).运行 ...

  6. 备赛电赛学习STM32篇(七):TIM输入捕获

    目录 一.输入捕获简介 二.频率测量 三.电路如何实现测周法 3.1.简介 3.2.详细的电路 3.3.主从触发模式 3.4.输入捕获和PWMI结构 四.输入捕获测量PWM波形的频率和占空比 4.1. ...

  7. 【WB32库开发】第12章(上)TIM1高级定时器——PWM输入捕获

    本章要学习的PWM输入捕获是定时器又一重要应用,使用PWM输入捕获可以测量输入PWM的频率和占空比. PWM输入只能使用定时器的两个通道:通道1和通道2,且一路PWM输入要占用两个捕获寄存器,一个用于 ...

  8. 单片机之PWM输入捕获

    首先要明白什么是PWM输入捕获? 第一,PWM输入捕获是基于TIM实现的一个功能:输入捕获就是当连接到定时器的引脚上产生电平变化时对应的捕获装置会立即将当前计数值复制到另一个寄存器中.你可以开启捕获中 ...

  9. PWM输入捕获(只使用一路定时器通道)

    前言 上一篇文章介绍了使用<STM32参考手册>上 PWM 输入模式捕获的 PWM 波,这种方法简单且准确,但是它占用的资源太多了,因为它使用定时器的两个通道,且这两个通道映射在一个通道上 ...

最新文章

  1. SNMP 协议 OID的使用
  2. Go 语言编程 — 基本数据类型
  3. Android开发环境——模拟器AVD相关内容汇总
  4. php如何转类型,PHP数据类型转换
  5. 取代浏览器插件调试,VS Code 整合 JS 调试工具
  6. mds算法 java_对OAF开发中的MDS的初步研究(转)
  7. 对数字信号处理中各种频率以及分辨率的理解
  8. Unity让物体以弧线的形式运动到规定的坐标
  9. android listview item字体,改变listview中item选中时文字的颜色
  10. 上采样(upsampling)(图像内插)——最邻近内插法、双线性内插法与双三次内插法
  11. Mirth Connect 快速安装
  12. 408 知识点笔记——操作系统(绪论、进程管理)
  13. xp系统蓝屏代码7b_7b蓝屏,win7系统蓝屏7b如何修复
  14. java拍照控件焦距问题,干货:监控中如何选择镜头焦距?
  15. 134个治病小偏方,从此不用去医院 - 生活至上,美容至尚!
  16. dovecot主要配置文件
  17. You're Not Late! You're Not Early
  18. 五月的仓颉大神写的 三年java程序员面试感悟 分享给大家
  19. 修改elementui的表格合并行和表格表头边框
  20. Unicode和字符集

热门文章

  1. 兰顿蚂蚁 蓝桥 模拟
  2. excel怎么设置自动计算_61份电气自动计算表,excel函数输入数据秒出精准结果,限时分享...
  3. 【血糖检测】改进深度回归网络的无创血糖检测【含Matlab源码 1572期】
  4. 软件实训之从调研到设计,产品设计的从0到1
  5. Android 连续播放同段音频(提示音)
  6. 以低代码软件构建物联网基础设施建设
  7. IBM江月:销售为什么爱“撒谎”
  8. 电气领域-输电线路杆塔鸟巢检测图像数据(含标签,原始图像未经扩充)
  9. centos6.5搭建贴吧云签到平台(多图预警)
  10. Linux为文件夹及其子文件赋权限