本帖最后由 hoop 于 2020-12-17 19:35 编辑
之前有研究AT403A和ST103的ADON触发功能,发现这个功能多少有点讨厌,如下举例说明
1.ADON触发功能本质
确实如RM所属,在ADON=1的状态下,如果软件再写一次ADON=1,就会带来一次规则触发
2.我之前的应用(反面教材)
我的ADC使用规则及注入转换,在某些时候需要切换注入通道,其中切换注入通道的关键代码如下
ADC_ExternalTrigInjectedConvCtrl(ADCx,DISABLE);///<为避免切换通道过程中发生注入触发事件,直接不允许注入外部触发
ADC_InjectedChannelConfig(ADCx,/*新的ADC_Channel*/, 1, /*新的SampleTime*/);///<切换第一个注入转换通道
ADC_InjectedChannelConfig(ADCx,/*新的ADC_Channel*/, 2, /*新的SampleTime*/);///<切换第二个注入转换通道
ADC_ExternalTrigInjectedConvCtrl(ADCx,ENABLE);///<注入通道切换完毕,重新允许注入外部触发
重点如上第一句和最后一句代码,原型分别如下
ADC1->CTRL2 &= ((uint32_t)0xFFFF7FFF;///<前述第一句
ADCx->CTRL2 |=(uint32_t)0x00008000;///<前述最后一句
这两句代码有一个共同特点,均在操作Bit位JEXTTRIG的同时还有将ADON的配置读出来再写回去,而由于之前我已经将ADON写1了,因此这两句代码的执行就实现了在ADON=1的状态下再写了一次ADON=1,所以就会带来一次不期望的规则组的转换
3.楼主提醒
小伙伴们,如果你们的ADC应用需要切换注入通道的话,要记得做好安全措施哦。
|