头像-280771

823da780032cf479

个人成就

获得 1 次赞

帮助过3人

有人有SI7021 HAL的文件吗 求分享

求一份SI7021 HAL库的- - 自己写的老是 湿度读取不正常 一直60+

STM32L4 停止模式PA口设为模拟 PB无法唤醒

STM32L4 进入停止模式前PA口设为模拟 PB 无法唤醒  调试发现无法进入外部中断,但是不把PA设置为模拟又正常 求解。以下是进入休眠前的设置 void KeyWKUPSet(void) { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; //下降沿触发 GPIO_InitStruct.Pull = GPIO_NOPULL; //无上拉无下拉 HAL_GPIO_Init(GPIOB &GPIO_InitStruct); HAL_NVIC_SetPriority(EXTI15_10_IRQn 0 0); //设置中断分组 HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); //使能外部中断 } void enter_stopmode(void) { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6| GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_12| GPIO_PIN_15; HAL_GPIO_Init(GPIOA &GPIO_InitStruct); GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pin = GPIO_PIN_All; // HAL_GPIO_Init(GPIOA &GPIO_InitStruct); HAL_GPIO_Init(GPIOB &GPIO_InitStruct); HAL_GPIO_Init(GPIOC &GPIO_InitStruct); HAL_GPIO_Init(GPIOD &GPIO_InitStruct); HAL_GPIO_Init(GPIOH &GPIO_InitStruct); __HAL_RCC_GPIOD_CLK_DISABLE(); __HAL_RCC_GPIOH_CLK_DISABLE(); GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA &GPIO_InitStruct); // HAL_UART_Init(&huart1); // HAL_UART_Init(&huart2); // HAL_UART_Init(&huart3); // HAL_UART_Init(&huart4); // HAL_UART_Init(&huart5); GPIO_InitStruct.Pin = GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF8_UART4; HAL_GPIO_Init(GPIOC &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART1; HAL_GPIO_Init(GPIOA &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART2; HAL_GPIO_Init(GPIOA &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART3; HAL_GPIO_Init(GPIOB &GPIO_InitStruct); // GPIO_InitStruct.Pin = LED_BAT_Pin; // GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; // GPIO_InitStruct.Pull = GPIO_NOPULL; // GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // HAL_GPIO_Init(GPIOC &GPIO_InitStruct); } 接下来是进入休眠的代码 if(API_SystemClock_TimingQuery_ms(SellpModeTimeSTOPTIME)==TimeOut) { HAL_GPIO_WritePin(LCD1_GPIO_Port LCD1_Pin GPIO_PIN_RESET); HAL_GPIO_WritePin(LCD2_GPIO_PortLCD2_PinGPIO_PIN_SET); enter_stopmode(); KeyWKUPSet(); HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ONPWR_STOPENTRY_WFE); //进入停止模式 SystemClock_Config(); SellpModeTime = API_SystemClock_CurrentTime_ms(); if(WKUPFlag==0) { /************必须初始化按键原因未知***************/ GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = KEY1_Pin|KEY2_Pin|KEY3_Pin|KEY4_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB &GPIO_InitStruct); } else if( WKUPFlag==2) { MX_GPIO_Init(); HAL_GPIO_WritePin(LCD1_GPIO_Port LCD1_Pin GPIO_PIN_SET); HAL_GPIO_WritePin(LCD2_GPIO_PortLCD2_PinGPIO_PIN_RESET); initial_lcd(); clear_screen(); WKUPFlag=0; } WKUPFlag 是我用来判断是那个按键产生的中断