[STM32L4] 将定时器 3 通道 3 初始化为计数器

[复制链接]
31|3
Hitomi22 发表于 2026-4-23 08:57 | 显示全部楼层 |阅读模式

我在STM32L496RET6开发项目,我想将 TIM3_CH3 → PB0 引脚配置为外部脉冲计数器。
目前无法为 TIM3 通道 3 设置时钟源
我已经将外部频率信号连接到 PB0 引脚,并且在示波器上能看到该引脚有频率输入。
当我把 TIM3_CH3 用作计数器时,无法选择 TI3即 TIM_CLOCKSOURCE_TI3和 TI3FP3 作为时钟源。
ST 官方提供的所有例程都只使用了定时器的通道 1 和通道 2,没有提到如何在通道 3 上实现这个功能。
当我把官方例程修改为通道 3 时,发现无法像 CH1/CH2 那样使用 TI2FP2 或 TI1FP1 这类配置。
通过软件调试测量频率时,读取不到任何数据。
这是我的 TIM3_CH3 初始化代码:
void Fn_Cnt3_Init(void)
{

Counter3.Instance = TIM3; // TIMx;
Counter3.Init.Period = 0xFFFF;
Counter3.Init.Prescaler = 0; //80;
Counter3.Init.ClockDivision = 0;
Counter3.Init.CounterMode = TIM_COUNTERMODE_UP;
Counter3.Init.RepetitionCounter = 0;
HAL_TIM_IC_Init(&Counter3); // if(HAL_TIM_IC_Init(&Counter2) != HAL_OK)
{
/* Initialization Error */
// Error_Handler();
}
C3ClockConfig.ClockFilter = 0;
C3ClockConfig.ClockPolarity = TIM_CLOCKPOLARITY_RISING;
C3ClockConfig.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1;
C3ClockConfig.ClockSource = TIM_CLOCKSOURCE_TI1;
HAL_TIM_ConfigClockSource(&Counter3, &C3ClockConfig);
TIM3->CR1 |= TIM_CR1_ARPE;
TIM3->CR1 = 1;
HAL_TIM_Base_Start_IT(&Counter3);
// TIM2->CR1 |= TIM_CR1_CEN;

}

stormwind123 发表于 2026-4-23 10:01 | 显示全部楼层
兄弟,TIM3的通道3根本不能直接当计数器时钟源输入,只有通道1和通道2支持TI1FP1/TI2FP2模式。
elephant00 发表于 2026-4-23 10:02 | 显示全部楼层
PB0可以当TIM3_CH3输出PWM,但别指望它做外部时钟输入,硬件不支持。
内政奇才 发表于 2026-4-23 10:09 | 显示全部楼层
最简单的改法:换个定时器,用TIM2_ETR接到PB0,开从模式外部时钟模式2。
classroom 发表于 2026-4-23 11:01 | 显示全部楼层
别折腾TI3了,数据手册里明说了——从模式控制器只认TI1和TI2。
在海边聆听 发表于 2026-4-23 11:45 | 显示全部楼层
别死磕TIM3了,L496上TIM2、TIM5、TIM15的ETR功能比你这条路好走。
cr315 发表于 2026-4-23 12:02 | 显示全部楼层
想数PB0上的脉冲?老老实实把信号引到TIM3的CH1或CH2脚上。
duo点 发表于 2026-4-23 13:02 | 显示全部楼层
你代码里写的是TIM_CLOCKSOURCE_TI1,但却连在PB0上,引脚和通道完全对不上。
flycamelaaa 发表于 2026-4-23 14:03 | 显示全部楼层
查一下STM32L496的定时器框图,外部时钟输入只接到TI1和TI2,TI3只能做输入捕获。
没有太阳的晴天 发表于 2026-4-23 14:41 | 显示全部楼层
你现在这个配置实际想让计数器靠TI1时钟走,但PB0根本没连到TI1上。
jcky001 发表于 2026-4-23 15:03 | 显示全部楼层
你开了输入捕获的初始化,却又想当时钟源,路子走歪了。
才没有脸红 发表于 2026-4-23 15:42 | 显示全部楼层
一句话:TIM3_CH3可以捕获,但不能做时钟源。想数脉冲,换ETR或换通道。
onlycook 发表于 2026-4-23 16:04 | 显示全部楼层
读不到数据是因为根本没有时钟源驱动计数器,CNT压根没动。
powerantone 发表于 2026-4-23 16:05 | 显示全部楼层
真要数脉冲,换用TIM2或TIM5的ETR引脚,那个才支持任意GPIO计数。
probedog 发表于 2026-4-23 18:06 | 显示全部楼层
把PB0的信号飞线到一个支持TI1的引脚上,比如PA0或PA6,立马能跑通。
solty 发表于 2026-4-23 19:07 | 显示全部楼层
你写的TIM3->CR1 = 1实际上关了自动重载预装载,还覆盖了ARPE设置。
进入猫次元 发表于 2026-4-23 19:42 | 显示全部楼层
建议重新啃一下STM32L496参考手册第25章,重点看从模式控制寄存器SMCR的TS位。
spicy 发表于 2026-4-23 20:07 | 显示全部楼层
HAL_TIM_ConfigClockSource这个函数对于CH3没用,底层寄存器根本配不出TI3时钟源。
stormwind123 发表于 2026-4-23 20:08 | 显示全部楼层
你混淆了“输入捕获”和“外部时钟源模式”——前者测脉冲宽,后者数脉冲个数。
七毛钱 发表于 2026-4-23 21:08 | 显示全部楼层
示波器看到PB0有信号只是第一步,硬件通道映射不支持就是白搭。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

136

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0