技术标签: 经验
STM32F1中RTC 不像 F4中,是一个单独模块。其就是一个计数器,查看HAL库中时间和日期的设置发现,在日期设置的时候,HAL库并没有将日期换算为计数器的值。
库源码如下
日期设置:
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
{
uint32_t counter_time = 0U, counter_alarm = 0U;
/* Check input parameters */
if((hrtc == NULL) || (sTime == NULL))
{
return HAL_ERROR;
}
/* Check the parameters */
assert_param(IS_RTC_FORMAT(Format));
/* Process Locked */
__HAL_LOCK(hrtc);
hrtc->State = HAL_RTC_STATE_BUSY;
if(Format == RTC_FORMAT_BIN)
{
assert_param(IS_RTC_HOUR24(sTime->Hours));
assert_param(IS_RTC_MINUTES(sTime->Minutes));
assert_param(IS_RTC_SECONDS(sTime->Seconds));
counter_time = (uint32_t)(((uint32_t)sTime->Hours * 3600U) + \ //HAL库这里计算的时间,后面写入计数器的
((uint32_t)sTime->Minutes * 60U) + \ //也就是这个值
((uint32_t)sTime->Seconds));
}
else
{
assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(sTime->Hours)));
assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(sTime->Minutes)));
assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(sTime->Seconds)));
counter_time = (((uint32_t)(RTC_Bcd2ToByte(sTime->Hours)) * 3600U) + \
((uint32_t)(RTC_Bcd2ToByte(sTime->Minutes)) * 60U) + \
((uint32_t)(RTC_Bcd2ToByte(sTime->Seconds))));
}
/* Write time counter in RTC registers */
if (RTC_WriteTimeCounter(hrtc, counter_time) != HAL_OK) //更新计数器,并没设计到日期
{
/* Set RTC state */
hrtc->State = HAL_RTC_STATE_ERROR;
/* Process Unlocked */
__HAL_UNLOCK(hrtc);
return HAL_ERROR;
}
else
{
/* Clear Second and overflow flags */
CLEAR_BIT(hrtc->Instance->CRL, (RTC_FLAG_SEC | RTC_FLAG_OW));
/* Read current Alarm counter in RTC registers */
counter_alarm = RTC_ReadAlarmCounter(hrtc);
/* Set again alarm to match with new time if enabled */
if (counter_alarm != RTC_ALARM_RESETVALUE)
{
if(counter_alarm < counter_time)
{
/* Add 1 day to alarm counter*/
counter_alarm += (uint32_t)(24U * 3600U);
/* Write new Alarm counter in RTC registers */
if (RTC_WriteAlarmCounter(hrtc, counter_alarm) != HAL_OK)
{
/* Set RTC state */
hrtc->State = HAL_RTC_STATE_ERROR;
/* Process Unlocked */
__HAL_UNLOCK(hrtc);
return HAL_ERROR;
}
}
}
hrtc->State = HAL_RTC_STATE_READY;
__HAL_UNLOCK(hrtc);
return HAL_OK;
}
}
HAL日期设置:
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
{
uint32_t counter_time = 0U, counter_alarm = 0U, days_elapsed = 0U, hours = 0U;
/* Check input parameters */
if((hrtc == NULL) || (sTime == NULL))
{
return HAL_ERROR;
}
文章浏览阅读2.1k次。protobuf提供了多种基础数据格式,包括string/bytes。从字面意义上,我们了解bytes适用于任意的二进制字节序列。然而对C++程序员来讲,std::string既能存储ASCII文本字符串,也能存储任意多个\0的二进制序列。那么区别在哪里呢?同时在实际使用中,我们偶尔会看到类似这样的运行错误:1.[libprotobuf ERROR google/protobuf/wir..._protobuf string与bytes比较
文章浏览阅读807次。 互联网流量红利消退已是不争的事实,各大互联网巨头也“八仙过海各显神通”,寻找新的出路。前不久,京东与新浪达成涵盖入口、产品层面的战略合作,此前,它还与百度、网易、360..._电商app如何增加新用户
文章浏览阅读3.8k次,点赞8次,收藏30次。效果图添加菜单QMenu* m_pAudioMenu = new QMenu(m_pMeetingWindow);m_pAudioMenu->setProperty("class", "blackMenu");m_pAudioMenu->setWindowFlags(m_pAudioMenu->windowFlags() | Qt::FramelessWindowHint);m_pAudioMenu->setAttribute(Qt::WA_TranslucentBack_qt 透明菜单
文章浏览阅读1.6w次,点赞3次,收藏54次。原址高通工具简介QXDM 简介QXDM 安装QXDM 激活QXDM 使用AT打开Diagnostic口QXDM 配置1 Message View ConfigurationMessage PacketsLog PacketsLog PacketsOTAEvent ReportsStrings2 Log View Config3 QXDM-保存配置文件4 QXDM-导入配置文件QPST 端口配置QX..._qxdm log
文章浏览阅读7k次,点赞7次,收藏6次。先上代码<canvas canvas-id='share' id="share"></canvas>js 部分我在onLoad 里面这么写的// 初始化canvasvar ctx = uni.createCanvasContext('share');// 绘制ctx.drawImage(imgPath, 0, 0, 300, 500)ctx.fillText(tetx, 100, 100)// ......微信小程序端没毛病,正常显示,但是!APP 端没_uniapp canvas画不出线
文章浏览阅读3.2k次,点赞3次,收藏6次。在你想更新state的地方,加一个setTimeout,setTimeout是同步的,带动state会立即更新,代码如下: setTimeout(() => { this.setState({ phone }) console.log(this.state.phone) }, 100);_react setstate 慢一步
文章浏览阅读79次。展开全部|参考代码:62616964757a686964616fe59b9ee7ad9431333431343639importjava.util.Scanner;publicclassExercise7{publicstaticvoidmain(String[]strings){Scannerinput=newScanner(System.in);intnumber_..._java语言switch编写:男生,超过18岁可以喝酒,没有超过18岁,喝饮料;女生,超过20
文章浏览阅读9.4k次,点赞7次,收藏42次。CSMA/CD协议1.概念CSMA/CD (Carrier Sense Multiple Access/collision detection)MA(Multiple Access)多址接入CS(Carrier Sense)载波监听CD(collision detection)碰撞检测多址接入:多个主机连接在一条主线上,竞争使用主线。载波监听:边发送帧,边检测信道是否空闲。碰撞检测:各发送站边发送帧边检测碰撞,当发检测到碰撞发生,立即停止发送帧,等待一段时间后,再重新发送。最大帧长。_csma/cd争用期
文章浏览阅读6k次,点赞2次,收藏40次。时间序列模型时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征。这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺序的,同样大小的值改变顺序后输入模型产生的结果是不同的。举个栗子:根据过去两年某股票的每天的股价数据推测之后一周的股价变化;根据过去2年某店铺每周想消费人数预测下周来店消费的人数等等RNN 和 ..._lstm雷达信号分类python
文章浏览阅读1.9w次,点赞5次,收藏15次。转载:https://segmentfault.com/q/1010000011452736vue.js : vue.js则是直接用在<script>标签中的,完整版本,直接就可以通过script引用。vue.common.js :预编译调试时,CommonJS规范的格式,可以使用require("")引用的NODEJS格式。vue.esm.js:预编译调试时, EcmaScr..._esm.js
文章浏览阅读2.9k次。最近看到CrashReport中经常看到因为GfxDeviceMetal::InvalidateState()这里闪退_unity 关闭metal api
文章浏览阅读1.9w次。在网上找了很多资料,很多网友都提到这个问题是不可解决的,面对这个问题,只能作罢。但我不甘心这么丢失数据,最最后找到了一个解决方法。经测试,原来数据,全部保住。以下为原文。http://www.sunnyu.com/?p=201 SQLite有一个很严重的缺点就是不提供Repair命令。导致死亡提示database disk image is malfor_runtime error: database disk image is malformed (11)