HK32F103x/C/D/E是航顺芯片推出的中大容量的103系列芯片。作为32位MCU常用的外设Timer是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。使用定时器预分频器和RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。每个定时器都是完全独立的,没有互相共享任何资源。
Timer主要功能
通用TIMx(TIM2、TIM3、TIM4、TIM5)定时器功能包括:
1)DAC触发功能
2)四路输入通道都下降沿触发,和双沿触发功能
3)16位向上、向下、向上/向下自动装载计数器
4)16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值
5)4个独立通道:输入捕获、输出比较、PWM生成(边缘或中间对齐模式)、单脉冲模式输出
6)使用外部信号控制定时器和定时器互连的同步电路
7)如下事件发生时产生中断/DMA:
─ 计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
─ 输入捕获
─ 输出比较
8)支持针对定位的增量(正交)编码器和霍尔传感器电路
9)触发输入作为外部时钟或者按周期的电流管理
Timer 输入捕获模式功能描述
在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中。当捕获事件发生时,相应的CCxIF标志(TIMx_SR寄存器)被置’1’,如果使能了中断或者DMA 操作,则将产生中断或者DMA 操作。如果捕获事件发生时CCxIF标志已经为高,那么重复捕获标志CCxOF(TIMx_SR寄存器)被置’1’。写CCxIF=0可清除CCxIF,或读取存储在TIMx_CCRx寄存器中的捕获数据也可清除CCxIF。写CCxOF=0可清除CCxOF。以下例子说明如何在TI1输入的上升沿时捕获计数器的值到TIMx_CCR1寄存器中,步骤如下:
选择有效输入端:TIMx_CCR1 必须连接到TI1 输入,所以写入TIMx_CCR1寄存器中的CC1S=01,只要CC1S不为’00’,通道被配置为输入,并且TM1_CCR1寄存器变为只读。
根据输入信号的特点,配置输入滤波器为所需的带宽(即输入为TIx 时,输入滤波器控制位是TIMx_CCMRx寄存器中的ICxF位)。假设输入信号在最多5个内部时钟周期的时间内抖动,我们须配置滤波器的带宽长于5个时钟周期。因此我们可以(以fDTS频率)连续采样8次,以确认在TI1上一次真实的边沿变换,即在TIMx_CCMR1寄存器中写入IC1F=0011。
选择TI1通道的有效转换边沿,在TIMx_CCER 寄存器中写入CC1P=0(上升沿)。
配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预分频器被禁止(写TIMx_CCMR1寄存器的IC1PS=00)。
设置TIMx_CCER寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中。
如果需要,通过设置TIMx_DIER寄存器中的CC1IE位允许相关中断请求,通过设置TIMx_DIER寄存器中的CC1DE位允许DMA请求。当发生一个输入捕获时:
产生有效的电平转换时,计数器的值被传送到TIMx_CCR1寄存器。
CC1IF标志被设置(中断标志)。当发生至少2个连续的捕获时,而CC1IF未曾被清除,CC1OF也被置’1’。
如设置了CC1IE位,则会产生一个中断。
如设置了CC1DE位,则还会产生一个DMA请求。
为了处理捕获溢出,建议在读出捕获溢出标志之前读取数据,这是为了避免丢失在读出捕获溢出标志之后和读取数据之前可能产生的捕获溢出信息。
操作Timer输入捕获模式上需要注意的地方
用户在使用HK32F103xC/D/E的Timer输入捕获测量正弦波时,频率计数不正确。这问题由于IO设计的问题,建议在被测信号整形成为方波输入,这样能弥补我们IO口设计的问题。或者芯片内部使能Timer数字滤波器,也能满足输入捕获测量正弦波计数的问题。
以上有关寄存器的介绍可以参考我们HK的HK32F103xC/D/E的应用手册。
来源: 航顺芯片
审核编辑:汤梓红
-
mcu
+关注
关注
146文章
16840浏览量
349722 -
寄存器
+关注
关注
31文章
5281浏览量
119746 -
航顺芯片
+关注
关注
1文章
102浏览量
22766
发布评论请先 登录
相关推荐
评论