我也用和你一样的方式进入睡眠,不过我没有让MCU进入休眠模式,而是唤醒后直接开始发数据,发现一致发送不成功,读了一下系统寄存器,发现读出来的值都不正确 uint32_t sys_ctrl = dwt_read32bitoffsetreg(SYS_CTRL_ID, SYS_CTRL_OFFSET); DEBUG_TRACE("Tick %u:%08X\r\n", now, sys_ctrl); 读出来的值是80FFFFFF,看样子是没有唤醒或者芯片逻辑乱了。 |
13764295318 发表于 2021-12-9 09:58 楼主这个问题解决了吗,我也遇到的问题是进入睡眠之后无法唤醒,您遇到过这样的问题吗 |
问题原因已找到:是单片机与DWM1000模块之间的问题 电路硬件连接完全按照官方电路图来实现的,具体原因,为什么要这样操作,我还没彻底分析清楚。 解决步骤:下面贴出设备休眠,唤醒操作 /************* Enter Stop Mode 进入低功耗模式*************************/ /*1,Stop2 Mode --- 1.02uA at 2V4 * 1.06uA at 3V * 1.23uA at 3V6 */ void Enter_StopMode(void){ // printf("\r\n4 --- Now Enter <Stop2 Mode> \r\n"); HAL_SuspendTick(); HAL_SPI_DeInit(&hspi1); HAL_UART_DeInit(&huart1); HAL_ADC_DeInit(&hadc1); HAL_GPIO_DeInit(GPIOA, DW_IRQn_Pin); //0xF76D GPIO_PIN_10 | DW_IRQn_Pin HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI); } void WakeUp_From_StopMode(void){ HAL_ResumeTick(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI1_Init(); MX_USART1_UART_Init(); MX_ADC1_Init(); // printf("\r\n\r\n1 --- Now WakeUp... \r\n"); } 其中问题出在这里HAL_SPI_DeInit(&hspi1);这里完全关闭spi配置,可能会造成和设备之间spi通讯引脚电平问题。 需要修改代码: void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) { if(hspi->Instance==SPI1) { /* USER CODE BEGIN SPI1_MspDeInit 0 */ /* USER CODE END SPI1_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_SPI1_CLK_DISABLE(); /**SPI1 GPIO Configuration PA1 ------> SPI1_SCK PA7 ------> SPI1_MOSI PA11 ------> SPI1_MISO */ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|GPIO_PIN_7|GPIO_PIN_11); /* USER CODE BEGIN SPI1_MspDeInit 1 */ GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;//GPIO_MODE_AF_PP GPIO_MODE_OUTPUT_OD GPIO_InitStruct.Pull = GPIO_PULLUP; //GPIO_PULLDOWN GPIO_PULLUP GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* USER CODE END SPI1_MspDeInit 1 */ } } 至此,设备的从唤醒起来,进行UWB发送,再进行一次AD采样的 持续时间,示波器抓了下,在28ms左右,比较符合预期。 同时需要注意:需要配置IRQ引脚 HAL_GPIO_DeInit(GPIOA, DW_IRQn_Pin); //0xF76D GPIO_PIN_10 | DW_IRQn_Pin 不然休眠电流会增大200uA左右。 最终我的设备休眠功耗在4.5uA ,1s lptimer唤醒一次,每次唤醒后工作时间在28ms。单片机STM32L431 具体为什么spi要这样配置,我还在分析中。 |
GMT+8, 2024-11-22 23:16 , Processed in 0.016370 second(s), 8 queries , File On.
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】