|
我用 STM32F407开发板,将一个带编码器的 Zaber 位移台连接到该单片机。断开连接时,我可以测量到 A、B 相信号从 GND 切换到 5V。我已经查看过信号,正交输出正常,且不需要上下拉电阻。 我将信号连接到引脚 PE9 和 PE11,并把 TIM1 设置为编码器模式。 TIM1 初始化函数如下: static void MX_TIM1_Init(void) { / USER CODE BEGIN TIM1_Init 0 / / USER CODE END TIM1_Init 0 / TIM_Encoder_InitTypeDef sConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; / USER CODE BEGIN TIM1_Init 1 / / USER CODE END TIM1_Init 1 / htim1.Instance = TIM1; htim1.Init.Prescaler = 0; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 65535; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim1.Init.RepetitionCounter = 0; htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; sConfig.EncoderMode = TIM_ENCODERMODE_TI1; sConfig.IC1Polarity = TIM_ICPOLARITY_RISING; sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; sConfig.IC1Prescaler = TIM_ICPSC_DIV1; sConfig.IC1Filter = 10; sConfig.IC2Polarity = TIM_ICPOLARITY_RISING; sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI; sConfig.IC2Prescaler = TIM_ICPSC_DIV1; sConfig.IC2Filter = 0; if (HAL_TIM_Encoder_Init(&htim1, &sConfig) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) { Error_Handler(); } } 但是,旋转编码器时,TIM1->CNT 始终保持为 0。 请教 |
向 “HAL_RTC_GetTime” 函数传递的第一个参数出现指针类型不兼容警告
定时器输出PWM控制电机的问题
STM32U575的LPTIM中断问题
TIM11,TIM13失效
STM32 用主从定时器方式实现DSP QEP模块的QCTMR功能,异常
TIM 单脉冲输出后的电平如何设置?
stm32h7 定时器输出比较模式+dma,生成脉冲异常
STM32CubeMX配置STM32F103C8T6 RTC分频器问题
STM32G473,PA3导致定时器定时误差过大
stm32u575 gpdma burst length=1 配置其他数值不工作
微信公众号
手机版
厂家的库中有现成的例程,可以参考一下。
可先用模拟信号调好功能。
应用中注意输入的信号符合芯片的要求。
\STM32Cube_FW_F4_V1.28.1\Projects\STM324xG_EVAL\Examples\TIM\TIM_Encoder
sConfig.EncoderMode 配置这个地方是不是有点问题? 如果针对两个通道都要进行计数的话,应该配置为TIM_ENCODERMODE_TI12 。你的
IC2Filter滤波目前可以设置为0,先把数计到,后面再适当调整滤波参数。别把正常的都滤掉了。还有,要让TIM计数的话,须调用
HAL_TIM_Encoder_Start()。【如果已经调用,无视此句即可。】[md]我测试一下哈