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

st-img
chrome
st-img
firefox
st-img
safari
st-img
ie8及以上
shequ.stmicroelectronics.cn
  • ST意法半导体官网
  • STM32中文官网
  • ST全球论坛
登录/注册
  • 首页
  • 技术问答
  • 话题
  • 资源
  • 创客秀
  • 视频
  • 标签
  • 积分商城
  • 每日签到
iPeanut

iPeanut

 

回答数 0 关注数 0
关注 私信
  • 动态99
  • 提问
  • 回答0
  • 创客秀 0
  • 分享 0
  • 关注0
6 回答

STM32L0系列有关从STOP模式唤醒后,立即进行ADC采样的问题?

STM32L0
iPeanut iPeanut 回答时间: 2022-4-24 10:59

[md]感谢您的回复。您说的很对。我也想尽量按照手册规范来,以保证可靠性。所以我现在改为如下的方式:ADC初始化还是配置为AUTOFF和WAIT使能,每次ADC采样转换完,关闭ADC,循环判别等待ADEN=0后,将ADC的调压器关闭即将ADVREGEN=0。然后在主循环进入STOP前,将ULP=0不关闭Vrefint,(即不再用ULP=1的方式,因为发现更改这个对我功耗影响不大),同时仍配置为快速唤醒即FWU=1。当用LPTIMER中断唤醒STOP后,在LPTIMER的中断回调函数中,准备开始ADC前,先循环判别等待REGLPF=0,保证主调压器稳定,然后手动置ADC的调压器ADVREGEN=1。然后开启要采样的通道,然后循环判别等待VREFINTRDYF标志=1,保证Vrefint已经正常(测试发现因为ULP=0,所以此时等待判别一次就可以通过,不会等待过长时间)。然后执行开始ADC转换操作(因为我用的AUTOFF和WAIT使能,所以没有执行ADC使能也没有等待ADRDY标志)。等待所需通道转换结束后,执行停止转换,再用ADDIS=1来失能ADC。然后关闭通道。然后循环判别等待ADEN=0后,将ADC调压器手动关闭ADVREGEN=0。然后等待下次的中断进行采样。您看这样的逻辑控制是否有问题吗。谢谢

赞0
0 回答

STM32L0系列ADC进入和退出STOP低功耗模式的使用问题

STM32L0 Timer/定时器 ADC
28 回答

STM32L0系列ADC的低功耗模式AUTOFF和WAIT功能的使用疑惑

STM32L ADC
iPeanut iPeanut 回答时间: 2022-1-7 15:22

感谢您的回复,在我的设计中串口收发配置使用了DMA,但ADC在CubeMX中配置确实没使用DMA,但LL库自动生成了ADC_REG_InitStruct.DMATransfer = LL_ADC_REG_DMA_TRANSFER_LIMITED;在ADC使用中也始终没有对他的转换作任何DMA的配置操作,这是不是就是您所说的相当于DMA没有工作呢?下面是我的自动生成的ADC初始化函数。是否会有问题吗? void MX_ADC_Init(void) { LL_ADC_REG_InitTypeDef ADC_REG_InitStruct; LL_ADC_InitTypeDef ADC_InitStruct; LL_GPIO_InitTypeDef GPIO_InitStruct; / Peripheral clock enable / LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1); /*ADC GPIO Configuration PA2 ------> ADC_IN2 PA3 ------> ADC_IN3 / GPIO_InitStruct.Pin = LL_GPIO_PIN_2; GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; LL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = LL_GPIO_PIN_3; GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; LL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure Regular Channel / LL_ADC_REG_SetSequencerChAdd(ADC1, LL_ADC_CHANNEL_2); /*Configure Regular Channel / LL_ADC_REG_SetSequencerChAdd(ADC1, LL_ADC_CHANNEL_3); /*Configure Regular Channel / LL_ADC_REG_SetSequencerChAdd(ADC1, LL_ADC_CHANNEL_VREFINT); LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(ADC1), LL_ADC_PATH_INTERNAL_VREFINT); /*Common config / ADC_REG_InitStruct.TriggerSource = LL_ADC_REG_TRIG_SOFTWARE; ADC_REG_InitStruct.SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE; ADC_REG_InitStruct.ContinuousMode = LL_ADC_REG_CONV_SINGLE; ADC_REG_InitStruct.DMATransfer = LL_ADC_REG_DMA_TRANSFER_LIMITED;//注意此处被初始化成了有DMA ADC_REG_InitStruct.Overrun = LL_ADC_REG_OVR_DATA_OVERWRITTEN; LL_ADC_REG_Init(ADC1, &ADC_REG_InitStruct); LL_ADC_SetSamplingTimeCommonChannels(ADC1, LL_ADC_SAMPLINGTIME_39CYCLES_5); LL_ADC_SetOverSamplingScope(ADC1, LL_ADC_OVS_DISABLE); LL_ADC_SetCommonFrequencyMode(__LL_ADC_COMMON_INSTANCE(ADC1), LL_ADC_CLOCK_FREQ_MODE_LOW); LL_ADC_DisableIT_EOC(ADC1); LL_ADC_DisableIT_EOS(ADC1); ADC_InitStruct.Resolution = LL_ADC_RESOLUTION_12B; ADC_InitStruct.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT; ADC_InitStruct.LowPowerMode = LL_ADC_LP_AUTOWAIT_AUTOPOWEROFF; LL_ADC_Init(ADC1, &ADC_InitStruct); LL_ADC_SetClock(ADC1, LL_ADC_CLOCK_ASYNC); LL_ADC_SetCommonClock(__LL_ADC_COMMON_INSTANCE(ADC1), LL_ADC_CLOCK_ASYNC_DIV2); }

赞0
iPeanut iPeanut


阅读作者更多的帖子

所在话题

参与活动

  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16