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

STM32G431 ADC只有软件触发,无法通过硬件触发

[复制链接]
岳晟恭睢 提问时间:2026-8-11 12:52 / 已解决

ADC-1.pngADC-2.png

ADC(1、2除通道不同其他均一致)使用如图配置,TIM1主要配置为

  TIM_InitStruct.Prescaler = 0;
  TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_CENTER_DOWN;
  TIM_InitStruct.Autoreload = 4249;
  TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
  TIM_InitStruct.RepetitionCounter = 0;
  LL_TIM_Init(TIM1, &TIM_InitStruct);
  LL_TIM_OC_EnablePreload(TIM1, LL_TIM_CHANNEL_CH4);
  TIM_OC_InitStruct.CompareValue = 170;
  LL_TIM_OC_Init(TIM1, LL_TIM_CHANNEL_CH4, &TIM_OC_InitStruct);
  LL_TIM_OC_DisableFast(TIM1, LL_TIM_CHANNEL_CH4);
  LL_TIM_SetTriggerOutput(TIM1, LL_TIM_TRGO_OC4REF);
  LL_TIM_SetTriggerOutput2(TIM1, LL_TIM_TRGO2_OC4);

主函数调用

  LL_TIM_EnableIT_CC4(TIM1);
  LL_ADC_EnableIT_JEOS(ADC1);
  LL_ADC_EnableIT_JEOS(ADC2);

  LL_ADC_Enable(ADC1);
  LL_ADC_Enable(ADC2);
  // 使能时钟
  LL_TIM_EnableCounter(TIM1);
  LL_TIM_EnableCounter(TIM2);

可以触发TIM1_CC4中断,但是ADC中断不触发,且ADC采集值不更新。

在TIM1_CC4中断中调用SET_BIT(ADC1->CR, ADC_CR_JADSTART);ADC有采集可以触发中断且值更新。

尝试使用TIM3配置使用ITR0(TIM1_TRGO)触发,TIM3可以启动,说明TIM1_TRGO触发没问题,但是ADC注入采集却一直没有通过他触发。

ADC-1.png
ADC-2.png
赞 收藏 评论7 发布时间:2026-8-11 12:52

举报

7个回答
xmshao 回答时间:2026-8-12 10:59:49

从你给出的信息来看,使用TIM1-CH4的ocref信号作为TRGO 去出发ADC,一般来讲是可以的。

我这边也验证了。你选择这个配置,有个小要求,那就你得保证有PWM波形可以实现,当然并非一定要输出。换言之,CH4理论上应该有上下沿的变化,否则会出现无触发情形。

image.png

cove 回答时间:2026-8-11 18:24:35

签到

岳晟恭睢 回答时间:2026-8-13 09:35:00

xmshao 发表于 2026-8-12 10:59
从你给出的信息来看,使用TIM1-CH4的ocref信号作为TRGO 去出发ADC,一般来讲是可以的。</p>
<p>我这边也验证 ...

[md]我在查找问题时有想过可能是TIM1_TRGO没有触发导致的,所以尝试过添加TIM1_CC4中断,TIM1_CC4中断可以正常触发。在此基础上有尝试使用TIM1_TRGO来触发TIM3,配置TIM3从模式TriggerMode,触发源ITR0(TIM1_TRGO),TIM3可以正常触发。此过程中ADC都没有触发。

岳晟恭睢 回答时间:2026-8-13 10:20:14

岳晟恭睢 发表于 2026-8-13 09:35
我在查找问题时有想过可能是<code>TIM1_TRGO</code>没有触发导致的,所以尝试过添加TIM1_CC4中断,TIM1_CC4中断 ...

[md]好吧,我找到原因了,我没有开启注入序列

xmshao 回答时间:2026-8-13 16:10:19

岳晟恭睢 发表于 2026-8-13 10:20
好吧,我找到原因了,我没有开启注入序列

嗯? 没开启注入序列,软件触发能成功?那触发的是啥呢?

岳晟恭睢 回答时间:2026-8-14 10:18:21

xmshao 发表于 2026-8-13 16:10
嗯? 没开启注入序列,软件触发能成功?那触发的是啥呢?

软件触发实质上就是开启了注入队列,因为我使用触发不是单次的,所以我以为是软件触发的采集,实际上是软件触发只是使能了注入队列,还是硬件触发的采集。

之前使用F4系列开发它没有这个设置,只需要使能ADC就可以了,软件触发使用的是ADC_CR2_JSWSTART他只管软件触发。

但是在G431上的ADC_CR_JADSTART位的作用变了,描述变成了如果配置位软件触发则立即采集,如果ADC触发器已设置为外部触发器,则ADC转换将在下一个触发事件(在选定的触发边缘)开始。所以我在G431上开启软件触发,实质上是使能了注入序列,让他可以正常通过外部触发器触发了。

xmshao 回答时间:2026-8-14 10:51:16

岳晟恭睢 发表于 2026-8-14 10:18
软件触发实质上就是开启了注入队列,因为我使用触发不是单次的,所以我以为是软件触发的采集,实际上 ...

[md]嗯。

STM32不同系列的同名外设操作上的确可能不一样。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版