输入捕获模式
在输入捕获模式下,当相应的 ICx⑦ 信号检测到跳变沿后,将使用捕获/比较寄存器 (TIMx_CCRx⑪) 来锁存计数器的值。发生捕获事件时,会将相应的 CCXIF⑬ 标志(TIMx_SR 寄存器)置 1, 并可发送中断或 DMA 请求(如果已使能)。如果再次发生捕获事件时 CCxIF⑬ 标志已处于高位, 则会将重复捕获标志 CCxOF⑫(TIMx_SR 寄存器)置 1。可通过软件向 CCxIF⑬ 写入 0 来给 CCxIF⑬ 清零,或读取存储在 TIMx_CCRx⑪ 寄存器中的已捕获数据。向 CCxOF⑫ 写入“0”后 会将其清零。
以下示例说明了如何在 TI1⑦ 输入出现上升沿时将计数器的值捕获到 TIMx_CCR1⑪ 中。
具体操作步骤如下:
第一步 : 选择有效输入:TIMx_CCR1⑪ 必须连接到 TI1⑦ 输入,因此向 TIMx_CCMR1 寄存器中的 CC1S⑥ 位写入 01。只要 CC1S 不等于 00,就会将通道配置为输入模式,并且 TIMx_CCR1⑪ 寄存器将处于只读状态。
第二步 : 根据连接到定时器的信号,对所需的输入滤波时间进行编程(如果输入为 TIx 输入,则 对 TIMx_CCMRx 寄存器中的 ICxF③ 位进行编程)。假设信号边沿变化时,输入信号最多在 5 个内部时钟周期内发生抖动。因此,我们必须将滤波时间设置为大于 5 个内部时钟周期。在检测到 8 个具有新电平的连续采样(以 f^DTS② 频率采样)后,可以确认 TI1 上的跳变沿。然后向 TIMx_CCMR1 寄存器中的 IC1F③ 位写入 0011。
第四步 : 通过在 TIMx_CCER 寄存器中将 CC1P 位和 CC1NP⑤ 位写入 0,选择 TI1 上的有效转换边沿(本例中为上升沿)。
第五步 : 对输入预分频器进行编程。在本例中,我们希望每次有效转换时都执行捕获操作,因此 需要禁止预分频器(向 TIMx_CCMR1 寄存器中的 IC1PSC⑧ 位写入“00”)。
第六步 : 通过将 TIMx_CCER 寄存器中的 CC1E⑨ 位置 1,允许将计数器的值捕获到捕获寄存器中。
第七步 : 如果需要,可通过将 TIMx_DIER 寄存器中的 CC1IE⑭ 位置 1 来使能相关中断请求,并且/ 或者通过将该寄存器中的 CC1DE⑮ 位置 1 来使能 DMA 请求。
发生输入捕获时:
· Ñ生有效跳变沿时,TIMx_CCR1⑪ 寄存器会获取计数器的值。
· CC1IF⑬ 标志置 1(中断标志)。如果至少发生了两次连续捕获,但 CC1IF⑬ 标志未被 清零,这样 CC1OF⑫ 捕获溢出标志会被置 1。
· 9据 CC1IE⑭ 位生成中断。
· 9据 CC1DE⑮ 位生成 DMA 请求。
要处理重复捕获,建议在读出捕获溢出标志之前读取数据。这样可避免丢失在读取捕获溢出标志之后与读取数据之前可能出现的重复捕获信息。
注意:通过软件将 TIMx_EGR 寄存器中的相应 CCxG⑩ 位置 1 可生成 IC 中断和/或 DMA 请求。