imperialhai 发表于 2017-12-4 22:29:02

STM32L4 停止(Stop)模式后唤醒ADC转换时间延迟问题

各位大佬好,

本人要实现的功能是将STM32L4运行在stop模式下,通过外部中断(PA0)唤醒,然后在尽量短的时间间隔内进行四路adc+DMA转换。现在实现的ADC开始采集的延迟是40us左右,与datasheet上提供的0.7us还差的较远,希望各位能给小弟指点一二。谢谢!

我想知道是不是ADC转换需要一定时间才能启动?如果是的话,怎么能够进一步减小这个时间?
http://community.st.com/servlet/JiveServlet/downloadImage/2-176689-23237/pastedImage_1.png图1 datasheet

图2 实验测得时间延迟(40 us)

这个是主要的代码


int main(void)
{HAL_Init();
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();// using MSI clock for system clock after wake-up
__HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_MSI);
// Stop mode - interrupt to wake up
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI);
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)adcValue,BUF_SIZE*CHANNEL_COUNT);
while (1)
{
   if (indi_led == 1)
   {
   HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
   HAL_UART_Transmit(&huart1,(uint8_t*)datastore1,BUF_SIZE,3000);
   indi_led = 0;
   HAL_Delay(3000);
   HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI);   HAL_ADC_Start_DMA(&hadc1,(uint32_t*)adcValue,BUF_SIZE*CHANNEL_COUNT);
   }}}



imperialhai 发表于 2017-12-5 19:15:52

有哪位大佬有这方面的经验吗?

feixiang20 发表于 2018-2-2 11:00:13

对程序懂的不多,说的比较含糊一点,建议看看,延迟时间是否是程序设置的原因造成的呢,是否有原始程序可以做参考呢,是否可以通过调节参数来判断时间过长过短的微妙变化呢?

ts2000 发表于 2018-2-2 11:26:27

ADC转换是没有延时的,是不是唤醒之后的时钟启动有延时??

freeelectron 发表于 2018-2-2 12:44:28

ADC转化延迟,看下时钟是不是没有恢复到进入低功耗模式之前哦

Tcreat 发表于 2018-2-2 14:34:05

那个 0.7us 是唤醒的时间 是从退出睡眠所以需要的时间,然后才开始送进入睡眠的地方启动所以以这个时间作为你ADC转换的时间 并不可靠的

无薪税绵 发表于 2018-2-4 10:15:49

看看MSI的时钟源的时钟频率是多少?
它最高可以设置为48MHZ,
这样单片机的处理速度就会加快了。

如果想要更快,可以试试使用外部时钟。
页: [1]
查看完整版本: STM32L4 停止(Stop)模式后唤醒ADC转换时间延迟问题