你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G473,PA3导致定时器定时误差过大

[复制链接]
xiaoqiang@zq_67 提问时间:2026-2-4 11:45 / 已解决

使用STM32G473的时候发现一个奇怪的问题,我的板子使用外部8MHZ晶振,配置为PLL作为系统时钟,时钟频率100MHZ,使用TIM1_CH1捕获GPS模块的秒脉冲,在捕获中断里面开启定时器3计时,同时PA3配置为LPUART1 RX,接收串口数据,发现定时3要配置为1009毫秒才不会溢出,计时一秒的误差达到9毫秒,明显不正常。在调试过程中我发现不接上PA3的串口设备,定时器3定时误差很小只有微妙级,把这个串口设备接到USART2 RX上定时器3的误差也很小。说明和串口设备无关。和PA3引脚配置有关。后来我把PA3引脚配置为开漏输入 一般IO,定时器3的定时误差还是很大。这个STM32G473的芯片BUG吗?请问有哪位大佬碰到过这个问题。

收藏 评论9 发布时间:2026-2-4 11:45

举报

9个回答
xiaoqiang@zq_67 回答时间:2026-2-5 16:32:15

问题已解决,程序没有问题,是电路板上一个没使用但是贴上去的电源芯片控制引脚没有控制,默认浮空输入,输出电平不确定,影响了单片机定时器的时钟,至于为什么会影响定时器的时钟,原因不明,目前的解决方案就是拆掉芯片或者把电源芯片使能引脚置低,关闭输出。谢谢厂家的关注与支持。

xmshao 回答时间:2026-2-4 13:53:20

感觉你目前最大的疑惑就是PA3做串口时或做输入时影响到TIM2的计数了。

所说的那个秒脉冲信号特征大致是怎样的?

它作为TIM3的计数时钟是多少?对你说的定时3要配置为1009毫秒才不会溢出不太理解?

什么叫才不会溢出呢? 芯片的完整料号是多少?

xiaoqiang@zq_67 回答时间:2026-2-5 08:37:31

qintian0303 回答时间:2026-2-5 09:41:40

是不是中断优先级的问题导致的1-副本.jpg1.jpg

xiaoqiang@zq_67 回答时间:2026-2-5 09:48:46

PA3是不是有什么隐藏功能,需要禁止掉,我现在一接上PA3,计时器误差就很大,不接上就是正常的。

xiaoqiang@zq_67 回答时间:2026-2-5 09:52:59

qintian0303 发表于 2026-2-5 09:41
是不是中断优先级的问题导致的![1-副本.jpg](data/attachment/forum/202602/05/094138snzzmmwwvz7r79hm ...

[md]我把所有的使能中断和中断执行函数都注释掉了,还是不行,这个BUG好像和程序没关系,在线调试的时候反复复位程序都不行,时间误差一直存在,只有不接PA3,掉电在上电,时间误差才没有。

qintian0303 回答时间:2026-2-5 10:09:27

xiaoqiang@zq_67 发表于 2026-2-5 09:52
我把所有的使能中断和中断执行函数都注释掉了,还是不行,这个BUG好像和程序没关系,在线调试的时候 ...

[md]尝试更换时钟源试一下有没有偏差

xiaoqiang@zq_67 回答时间:2026-2-5 11:10:13

使用内部16MHz的晶振也试了,感觉和外部晶振的偏差差不多。这是配置时钟的代码。

void SystemClock_Config(void) { LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG); LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR); NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); LL_PWR_DisableUCPDDeadBattery(); NVIC_DisableIRQ(SysTick_IRQn);

if 1

LL_FLASH_SetLatency(LL_FLASH_LATENCY_4); while(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_4) { } LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1); LL_RCC_EnableIT_HSERDY(); LL_RCC_HSE_Enable(); while(LL_RCC_IsActiveFlag_HSERDY() != 1) {

} / Main PLL configuration and activation / LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 50, LL_RCC_PLLR_DIV_2);

else

LL_FLASH_SetLatency(LL_FLASH_LATENCY_4); while(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_4) { } LL_PWR_EnableRange1BoostMode(); LL_RCC_HSI_Enable(); / Wait till HSI is ready / while(LL_RCC_HSI_IsReady() != 1) { }

LL_RCC_HSI_SetCalibTrimming(64); LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSI, LL_RCC_PLLM_DIV_4, 50, LL_RCC_PLLR_DIV_2);

endif

LL_RCC_PLL_Enable(); LL_RCC_PLL_EnableDomain_SYS(); while(LL_RCC_PLL_IsReady() != 1) { }

LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL); LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2); while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL) { }

LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1); LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1); LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);

/ Set systick to 1ms in using frequency set to 100MHz / // LL_Init1msTick(100000000);

/ Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) / LL_SetSystemCoreClock(100000000); }

xmshao 回答时间:2026-2-6 10:11:25

xiaoqiang@zq_67 发表于 2026-2-5 16:32
问题已解决,程序没有问题,是电路板上一个没使用但是贴上去的电源芯片控制引脚没有控制,默认浮空输入 ...

[md]谢谢反馈~!

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版