动漫网站设计理念,百度网页提交入口,中文旅游网站html模板,wordpress社交插件需求描述
执行完毕正常代码之后#xff0c;让MCU进入待机模式#xff0c;设置闹钟#xff0c;自动让MCU从待机模式中被唤醒。可以用led点亮熄灭显示是否唤醒。
应用场景#xff1a;比如设计一个野外温度自动采集的设备#xff0c;规定每小时采集一次温度#xff0c;就可…需求描述
执行完毕正常代码之后让MCU进入待机模式设置闹钟自动让MCU从待机模式中被唤醒。可以用led点亮熄灭显示是否唤醒。
应用场景比如设计一个野外温度自动采集的设备规定每小时采集一次温度就可以定义一个1小时的闹钟定时唤醒采集温度采集完进入待机模式可以大大降低设备功耗。
CubeMX配置
初始配置HAL 库创建hal首要配置内容---查询相关函数的方法-CSDN博客
配置USART1选择异步通讯模式其他保持默认
配置RTC激活时钟源然后点击时钟配置页勾选LSE外部低速晶振其余保持默认。
配置LED等用来表示当前的工作状态查找PA1选择Output配置位通用推挽输出默认高电平关灯状态。
生成代码HAL 库创建hal首要配置内容---查询相关函数的方法-CSDN博客
配置keil魔法棒勾选MicroLIB点击Debug配置自动复位。
书写代码
第一步 重写printf函数
在usart.c文件最下方书写当然记得头文件引入stdio.h
/* USER CODE BEGIN 1 */
int fputc(int ch, FILE *file)
{HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, 1000);return ch;
}
/* USER CODE END 1 */
第二步书写 mian.c文件 /* USER CODE BEGIN 2 */// 清除标志位if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB)){printf(从待机模式唤醒\n);__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);}if (__HAL_PWR_GET_FLAG(PWR_FLAG_WU)){printf(发生了唤醒事件\n);__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);}printf(低功率实验待机模式...\n);// 1. 开启LED灯延时2s模拟正常程序执行过程HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);HAL_Delay(2000);/* USER CODE END 2 */
其中开启LED灯为了方便在main.h文件进行了宏定义
#define LED2_Pin GPIO_PIN_1
#define LED2_GPIO_Port GPIOA
while (1){// 2. 进入待机模式printf(正常代码执行完毕3s后进入待机模式...\n);HAL_Delay(3000);printf(进入待机模式等待5s后RTC闹钟唤醒...\n);// 2.1 设置RTC闹钟RTC_SetAlarm(5);// 2.2 调库进入待机模式HAL_PWR_EnterSTANDBYMode();// 3. 以下代码不会执行printf(从待机模式中唤醒...\n);HAL_Delay(2000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}
其中的设置RTC闹钟重写了一个函数在rtc.c文件的最下方
// 定义设置闹钟的函数
void RTC_SetAlarm(uint32_t s)
{// 1. 获取当前时间类型就是RTC_TimeTypeDefRTC_TimeTypeDef currTime;HAL_RTC_GetTime(hrtc, currTime, RTC_FORMAT_BIN);// 2. 调库设置闹钟RTC_AlarmTypeDef sAlarm {0};sAlarm.AlarmTime.Hours currTime.Hours;sAlarm.AlarmTime.Minutes currTime.Minutes;sAlarm.AlarmTime.Seconds currTime.Seconds s - 1;HAL_RTC_SetAlarm(hrtc, sAlarm, RTC_FORMAT_BIN);
}/* USER CODE END 1 */