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

小白求助STM32L476 将端口设为模拟输入后无法进入stop2模式

[复制链接]
lowpowerstudy 提问时间:2020-10-21 17:22 /
阅读主题, 点击返回1楼
收藏 评论13 发布时间:2020-10-21 17:22
13个回答
lowpowerstudy 回答时间:2020-10-26 11:02:59
小歆-2051663 发表于 2020-10-26 09:29
重新开启ADC相当于你再次初始化你的ADC,如果你是用CubeMX生成的代码,应该在main函数中有一个MX_ADC_Ini ...

谢谢大佬 我发现是台式万用表接入单片机后 导致单片机ADC示数不准 ,现在已经调整了,但是发现待机时候的电流从400微安降到280微安,我是否还应该关闭 SPI 和定时器 继续降低功耗
lowpowerstudy 回答时间:2020-10-26 11:22:40
小歆-2051663 发表于 2020-10-26 09:29
重新开启ADC相当于你再次初始化你的ADC,如果你是用CubeMX生成的代码,应该在main函数中有一个MX_ADC_Ini ...

进入stop2前的函数如下
  1. if(WakeUpState==1)
  2.                 {
  3.                 NRF24L01_LowPower_Mode();
  4.                 HAL_TIM_Base_Stop_IT(&htim2);
  5.                 HAL_TIM_Base_Stop_IT(&htim8);
  6.                 HAL_TIM_Base_Stop_IT(&htim2);
  7.                 HAL_TIM_Base_Stop_IT(&htim8);
  8.                 WakeUpState=0;
  9.                 HAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef* hadc);
  10.                 HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc);
  11.     __HAL_SPI_DISABLE_IT(&hspi2, SPI_IT_RXNE);       
  12. }
复制代码

然后唤醒后初始化的函数如下
  1. SystemClock_Config();
  2.   MX_GPIO_Init();
  3.   MX_DMA_Init();
  4.   MX_ADC1_Init();
  5.   MX_ADC2_Init();
  6.   MX_SPI2_Init();
  7.   MX_TIM2_Init();
  8.   MX_TIM8_Init();
复制代码

gpio我没有关断,因为在cubemx里面已经设置了空闲引脚为模拟输入 想问一下还有哪个部分可以继续降低功耗 谢谢大佬
小歆-2051663 回答时间:2020-10-26 11:33:26
lowpowerstudy 发表于 2020-10-26 11:02
谢谢大佬 我发现是台式万用表接入单片机后 导致单片机ADC示数不准 ,现在已经调整了,但是发现待机时候的 ...

这个要根据你的项目情况,关闭不需要外设。
lowpowerstudy 回答时间:2020-10-26 16:20:22
小歆-2051663 发表于 2020-10-26 11:33
这个要根据你的项目情况,关闭不需要外设。

大佬您好 我按照您说的将所有的GPIO端口关闭了,功耗的确降下来了
  1. GPIO_InitTypeDef GPIO_InitStruct;
  2.   __HAL_RCC_GPIOA_CLK_ENABLE();
  3.     __HAL_RCC_GPIOB_CLK_DISABLE();
  4.     __HAL_RCC_GPIOC_CLK_DISABLE();  
  5.     __HAL_RCC_GPIOD_CLK_DISABLE();
  6.     __HAL_RCC_GPIOE_CLK_DISABLE();
  7.     __HAL_RCC_GPIOF_CLK_DISABLE();
  8.     __HAL_RCC_GPIOG_CLK_DISABLE();
  9.     __HAL_RCC_GPIOH_CLK_DISABLE();   

  10.     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  11.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  12.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  13.     GPIO_InitStruct.Pin = GPIO_PIN_All;

  14.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  15.     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  16.     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);  
  17.     HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  18.     HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  19.     HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
  20.     HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
  21.     HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);  

  22.     __HAL_RCC_GPIOA_CLK_DISABLE();
  23.     __HAL_RCC_GPIOB_CLK_DISABLE();
  24.     __HAL_RCC_GPIOC_CLK_DISABLE();
  25.     __HAL_RCC_GPIOD_CLK_DISABLE();
  26.     __HAL_RCC_GPIOE_CLK_DISABLE();
  27.     __HAL_RCC_GPIOF_CLK_DISABLE();
  28.     __HAL_RCC_GPIOG_CLK_DISABLE();
  29.     __HAL_RCC_GPIOH_CLK_DISABLE();
复制代码

但是发现ADC测量不准了 这个应该如何调整唤醒后的操作为
  1. HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);//清除RTC计时器
  2.         HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, 10000, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
  3.         HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
  4.   SystemClock_Config();
  5.         MX_GPIO_Init();
  6.   MX_DMA_Init();
  7.   MX_ADC1_Init();
  8.   MX_ADC2_Init();
  9.   MX_SPI2_Init();
  10.   MX_TIM2_Init();
  11.         MX_TIM8_Init();
复制代码
也按照cubemx的初始化了GPIO
12

所属标签

相似问题

官网相关资源

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