物联网操作系统软件定时器

软件定时器的定义和作用

FreeRTOS软件定时器

在这里插入图片描述
FreeRTOS软件定时器工作原理
在这里插入图片描述

软件定时器函数应用

功能需求

  • 使用软件定时器功能完成闹钟功能设计
  • 当闹钟到达时,可根据执行动作,触发相关的led亮灭
    在这里插入图片描述
    API
    xTimerCreate()
    在这里插入图片描述
    xTimerStart()
    在这里插入图片描述
    xTimerReset()
    在这里插入图片描述
    pvTimerGetTimerID()
    在这里插入图片描述
    xTimerChangePeriod()
    在这里插入图片描述
    功能设计实验
    1、硬件功能框架
    在这里插入图片描述
    串口命令定义
    在这里插入图片描述
    功能业务划分
    在这里插入图片描述
    功能实现流程一:
    在这里插入图片描述
    1.1配置RTC
    在这里插入图片描述
    使能开发板外部晶振为低速时钟
    在这里插入图片描述
    在这里插入图片描述
    在RTC配置里使能时钟源,使能日历功能
    在这里插入图片描述
    在configuration里将数据格式配置为二进制

在这里插入图片描述
在FreeRTOS里配置使能软件定时器
在这里插入图片描述
创建任务

在这里插入图片描述
创建消息队列:1、用于消息命令解析
2、用于LED消息传输
在这里插入图片描述
实时时钟的读写操作

//RTC初始化
void MX_RTC_Init(void)
{
   
  RTC_TimeTypeDef sTime = {
   0};
  RTC_DateTypeDef sDate = {
   0};

  /**Initialize RTC Only 
  */
  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 127;
  hrtc.Init.SynchPrediv = 255;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
   
    Error_Handler();
  }

  /* USER CODE BEGIN Check_RTC_BKUP */
    
  /* USER CODE END Check_RTC_BKUP */

  /**Initialize RTC and set the Time and Date 
  */
  sTime.Hours = 0;
  sTime.Minutes = 0;
  sTime.Seconds = 0;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
  {
   
    Error_Handler();
  }
  sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  sDate.Month = RTC_MONTH_JANUARY;
  sDate.Date = 1;
  sDate.Year = 0;

  if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
  {
   
    Error_Handler();
  }

}
void SetRTC(RTCTimeDates *pRTCTimeDate){
   
	
	if (HAL_RTC_SetTime(&hrtc, &pRTCTimeDate->RtcTime, RTC_FORMAT_BIN) != HAL_OK)
	{
   
		Error_Handler();
	}
  if (HAL_RTC_SetDate(&hrtc, &pRTCTimeDate->RtcDate, RTC_FORMAT_BIN) != HAL_OK)
  {
   
		Error_Handler();
  }
}

RTCTimeDates GetRTC(void){
   
	RTCTimeDates	RTCTimeDate;
  if (HAL_RTC_GetTime(&hrtc, &RTCTimeDate.RtcTime, RTC_FORMAT_BIN) != HAL_OK)
  {
   
    Error_Handler();
  }
   if (HAL_RTC_GetDate(&hrtc, &RTCTimeDate.RtcDate, RTC_FORMAT_BIN) != HAL_OK)
  {
   
    Error_Handler();
  }
     printf("Real Time:%d-%d-%d %d:%d:%d\n",
          RTCTimeDate.RtcDate.Year + 2000,
          RTCTimeDate.RtcDate.Month,
          RTCTimeDate.RtcDate.Date,
          RTCTimeDate.RtcTime.Hours,
          RTCTimeDate.RtcTime.Minutes,
          RTCTimeDate.RtcTime.Seconds
          );
  return RTCTimeDate;

}

功能实现流程二
在这里插入图片描述
使能串口接收中断
串口中断发送消息队列

解析命令字符串

void vCmdParseString(</
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值