|
沙发
楼主 |
发表于 2021-12-9 09:58:46
|
只看该作者
问题原因已找到:是单片机与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要这样配置,我还在分析中。 |
|