您的位置:首页 > 游戏 > 游戏 > 新媒体广告代理加盟_可以自己设计图案的软件_苏州网站外包_网络营销心得体会800字

新媒体广告代理加盟_可以自己设计图案的软件_苏州网站外包_网络营销心得体会800字

2025/1/8 4:30:59 来源:https://blog.csdn.net/qq_64219867/article/details/144893956  浏览:    关键词:新媒体广告代理加盟_可以自己设计图案的软件_苏州网站外包_网络营销心得体会800字
新媒体广告代理加盟_可以自己设计图案的软件_苏州网站外包_网络营销心得体会800字

STM32CubeMX设置

开串口以及中断

LED2,配置GPIO

生成项目:

keil配置自动复位和打开MicroLIB

书写代码:首先书写uart.c中重写printf

#include <stdio.h>
int fputc (int ch,FILE * file)
{HAL_UART_Transmit(&huart1,(uin8_t *)&ch,1,1000);return ch;
}

复制register代码到hal库中main.c中

    printf("低功率实验:睡眠模式...\n");// 1. 开启LED灯,延时2s,模拟正常程序执行过程LED_On(LED_1);Delay_s(2);while (1){// 2. 进入睡眠模式printf("正常代码执行完毕,3s后进入睡眠模式...\n");Delay_s(3);printf("进入睡眠模式");enter_sleep_mode();// 3. 以下代码只有在唤醒之后才会执行printf("从睡眠模式中唤醒...\n");Delay_s(2);}

然后再进行修改:

  printf("尚硅谷低功率实验:睡眠模式...\n");// 1. 开启LED灯,延时2s,模拟正常程序执行过程HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);HAL_Delay(2000);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){// 2. 进入睡眠模式printf("正常代码执行完毕,3s后进入睡眠模式...\n");HAL_Delay(3000);printf("进入睡眠模式\n");HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);// 3. 以下代码只有在唤醒之后才会执行printf("从睡眠模式中唤醒...\n");HAL_Delay(2000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}

但是hal库中的中断开启需要手动开启

HAL_UART_Receive_IT(&huart1, &ch, 1);

运行代码会发现不停的唤醒,因为任何中断都可以进入睡眠模式,hal中的systick中断也可以进入睡眠,解决办法是临时暂停然后恢复。

    // 暂停Systick中断HAL_SuspendTick();HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);// 恢复Systick中断HAL_ResumeTick();

再次运行:会发现进入睡眠模式后只能唤醒1次,分析原因是因为,中断服务程序默认关闭中断。

解决办法,是将中断服务程序的回调函数,重写打开中断。 添加下面代码(哪里都可以)。

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if (huart->Instance == USART1){printf("%c", ch);// 重新打开接收中断使能HAL_UART_Receive_IT(&huart1, &ch, 1);}
}

进入睡眠模式发现烧录不了程序了,解决方法是打开keil中按下图配置

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com