本帖最后由 LiuDW091 于 2025-7-24 16:25 编辑
#申请原创# #有奖活动# #申请开发板#@21小跑堂
这个低功耗模式以前没玩过,这两天都在摸索着,IDE软件编译器也不给力
经常报错,说找不到文件,但是文件path路径都已经设置了的,哎,说多了都是泪
一、首先通原理图、数据手册,找到自己需要的DAC端口,以及连接到的外部管脚
还是老三样,找硬件原理图,看看需要的串口在哪里,别接错了
LPUART1设置的时候需要主要,默认的串口不是PA2、PA3,需要手动更改
二、IDE软件配置
1、GPIO
2、ICACHE
3、LPUART1
4、PWR
5、NVIC
6、时钟
手册上说HSI稳定点,当然这个没验证过,有兴趣也可以验证下
三、代码调试
生成代码后,可以参考例程来调试,不过需要将自己需要的文件放在目录下面,路径也需要添加
不过可能会遇到有文件却报错显示找不到文件的尴尬情况哦
这时候不要纠结了,可以换软件或者直接使用例程,在例程里面修改。
#if!defined(BOARD_IN_STOP_MODE)
/* Configure User push-button in Interrupt mode */
BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);
/* Wait for User push-button press before starting the Communication.
In the meantime, LD2 is blinking */
while (UserButtonStatus == 0)
{
/* Toggle LD2*/
BSP_LED_Toggle(LD2);
HAL_Delay(100);
}
BSP_LED_Off(LD2);
/* The board sends the message and expects to receive it back */
/*##-1- Start the transmission process #####################################*/
if (HAL_UART_Transmit_IT(&hlpuart1, (uint8_t *)aTxBuffer, TXBUFFERSIZE) != HAL_OK)
{
Error_Handler();
}
/*##-2- Put UART peripheral in reception process ###########################*/
if (HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
{
Error_Handler();
}
/* Wait for reception complete callback */
while (UserReceptionComplete == 0)
{
}
/* Compare the expected and received buffers */
if (Buffercmp((uint8_t *)aTxBuffer, (uint8_t *)aRxBuffer, RXBUFFERSIZE))
{
Error_Handler();
}
/* Turn on LD2 if test is ok */
BSP_LED_On(LD2);
#else
这段代码主要是串口接收、发送数据的,可以直接使用例程里面的
/* LD2 is on till stop mode */
BSP_LED_On(LD2);
/* wait for two seconds before test start */
HAL_Delay(2000);
/* Disable Debug during Stop mode */
HAL_DBGMCU_DisableDBGStopMode();
/* Enable MCU wake-up by LPUART */
HAL_UARTEx_EnableStopMode(&hlpuart1);
/*##-1- Put UART peripheral in reception process ###########################*/
if (HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
{
Error_Handler();
}
/* about to enter STOP mode: switch off LD2 */
BSP_LED_Off(LD2);
/* enter STOP mode */
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
/* The board receives the message from the other board. Message reception wakes up the board. */
/* Switch On LD2 */
BSP_LED_On(LD2);
/* At that point, MCU has been awoken: LD2 has been turned back on ; Wake Up based on RXNE flag successful */
SystemClock_Config_fromSTOP();
/* Disable MCU wake-up by LPUART */
HAL_UARTEx_DisableStopMode(&hlpuart1);
/* Wait for reception complete callback */
while (UserReceptionComplete == 0)
{
}
/*##-2- Start the transmission process #####################################*/
/* Send back received buffer */
if (HAL_UART_Transmit_IT(&hlpuart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
{
Error_Handler();
}
这部分主要是通过中断/串口唤醒MCU,接收数据,
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
BSP_LED_Toggle(LD2);
/* wait for two seconds before test start */
HAL_Delay(100);
}
/* USER CODE END 3 */
}
唤醒后,LD2等开始闪烁
四、实验效果
视频:
复位后,进入低功耗模式,测得电流0.35mA;
USER唤醒后电流1.2mA左右,串口发送数据,可以收到并显示;
按复位进入低功耗模式,串口发送数据,唤醒MCU,LD2闪烁。
代码:
STOP低功耗模式下唤醒.rar
(9.2 KB)
|