当前位置:数码通 > 手机

HK32MCU应用笔记(16) | HK32F103xC/D/E

来源于 数码通 2023-09-29 06:32

HK32F103x/C/D/E是航顺芯片推出的中大容量103系列芯片。作为 32 位 MCU 的常用外设,Timer 由可编程 预分频器驱动的 16 位自动加载计数器组成。它适用于多种情况,包括测量输入信号的脉冲长度(输入捕获)或生成输出波形(输出比较和PWM)。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以从几微秒调整到几毫秒。每个定时器都是完全独立的,彼此之间不共享任何资源。

定时器主要功能

通用 TIMx(TIM2、TIM3、TIM4、TIM5)定时器功能包括:

1) DAC触发功能
2)四个输入通道均具有下降沿触发和双边沿触发功能
3)16位向上、向下、向上/向下自动加载计数器
4)16位可编程(可实时修改)预分频器,计数器时钟频率的分频系数为1到65536之间的任意值
5)4个独立通道:输入捕捉、输出比较、PWM生成(边沿或中心对齐模式)、单脉冲模式输出
6) 使用外部信号控制定时器以及定时器互连的同步电路
7) 当以下事件发生时,产生中断/DMA
─ 计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)
─ 触发事件(计数器启动、停止、初始化或内部/外部触发计数)
─ 输入捕捉
─ 输出比较

8) 支持增量(正交)编码器和霍尔传感器电路
进行定位 9) 触发输入作为外部时钟或周期电流管理

定时器输入捕捉模式功能说明

在输入捕捉模式下,当检测到ICx信号上的相应边沿时,计数器的当前值被锁存到捕捉/比较寄存器(TIMx_CCRx) )中间。当捕获事件发生时,相应的 CCxIF 标志(TIMx_SR 寄存器)被设置为“1”。如果启用了中断或 DMA 操作,则会生成中断或 DMA 操作。如果捕捉事件发生时 CCxIF 标志已为高电平,则重复捕捉标志 CCxOF(TIMx_SR 寄存器)将设置为“1”。 CCxIF 可通过写入 CCxIF=0 或读取 TIMx_CCRx 寄存器中存储的捕捉数据来清零。写入 CCxOF=0 将清除 CCxOF。以下示例显示如何在 TI1 输入的上升沿将计数器值捕获到 TIMx_CCR1 寄存器中。步骤如下:

选择有效输入:TIMx_CCR1 必须连接到 TI1 输入,因此在 TIMx_CCR1 寄存器中写入 CC1S=01。只要 CC1S 不为“00”,通道就会配置为输入,并且 TM1_CCR1 寄存器变为只读。

根据输入信号的特性,将输入滤波器配置为所需带宽(即当输入为TIx时,输入滤波器控制位为TIMx_CCMRx寄存器中的ICxF位)。假设输入信号在最多 5 个内部时钟周期内抖动,我们必须将滤波器带宽配置为长于 5 个时钟周期。因此我们可以连续采样8次(以fDTS频率)来确认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 请求。

为了处理捕获溢出,建议在读取捕获溢出标志之前读取数据。这是为了避免丢失在读取捕获溢出标志之后、读取数据之前可能产生的捕获溢出信息

操作定时器输入捕捉模式时的注意事项

当用户使用HK32F103xC/D/E的定时器输入捕捉来测量正弦波时,频率计数不正确。这个问题是由于IO设计问题造成的。建议将测量信号整形为方波输入,这样可以弥补我们IO口设计的问题。或者启用芯片内部的Timer数字滤波器也可以解决输入捕获和正弦波计数测量的问题。

以上寄存器的介绍,请参考我们的HK32F103xC/D/E应用手册。

来源:航顺芯片

审稿编辑:唐子红

-->
登录后参与评论