ST意法半导体
直播中

微风挽雨

9年用户 927经验值
擅长:可编程逻辑 电源/新能源 嵌入式技术
私信 关注
[问答]

如何手动重置STM32H7 LPTIMER1的计数器呢?

我是 STM32H7 定时器/计数器的新手。我找到了 LPtiM_PulseCounter 示例,这是一个很好的起点。但我有几个问题:
  • 如何手动(不是通过自动重新加载)重置 LPTIMER1 的计数器?我在 HAL LPTIM 通用驱动程序中找不到任何 HAL_LPTIM_CounterClear()、HAL_LPTIM_Counter_Reset()、HAL_LPTIM_Counter_Write(0x0000) 函数。
  • 据我所知,LPTIMER1 能够对正交编码信号进行计数。它有两个输入,我可以设置编码器模式,我可以使用 HAL_LPTIM_Encoder_Start (LPTIM_HandleTypeDef * hlptim, uint32_t Period) 函数启动编码器模式。但我想应该将 period 参数设置为 0xFFFF,以便在 PERIOD 计数后不允许自动重新加载功能。
  • ENCODER 模式是否适用于 32 位定时器?无需成为 LPTIMER。
  • 我有 STM32H747I-DISCO 开发板。LPTIMER1 的输入 1 位于 Arduino 连接器 PD12(CN5 的引脚 10)中。LPTIMER1 的 Input2 是否在同一个 CN5 连接器中但下一个引脚:CN5 (PD13) 的引脚 9?
  • 是否有任何示例如何在 STM32H747I-DISCO 板上使用 LPTIMER1 作为编码器?
谢谢你的帮助!


回帖(1)

李阳

2022-12-28 15:17:42
看起来 HAL_TIM_Encoder_Start_IT 实际上并没有启用更新中断。您可以在启动编码器后手动执行此操作:


  • /* Enable the TIM Update interrupt */
  • __HAL_TIM_ENABLE_IT(&htim4, TIM_IT_UPDATE);

HAL_TIM_Encoder_Start_IT 确实启用了 CC1 和 CC2 中断,这将导致调用 HAL_TIM_IC_CaptureCallback。看起来这就是 HAL 希望您在计时器模式下使用编码器的方式。将 CCR1 设置为 0,将 CCR2 设置为半量程,以便能够检测溢出。检查 htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1 或 HAL_TIM_ACTIVE_CHANNEL_2 以查看哪个被调用。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分