当前位置: 首页 > news >正文

基于RT-Thread的STM32F4开发第七讲——RTC(硬件、软件)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、RT-Thread工程创建
    • 1.硬件RTC配置
    • 2.软件RTC配置
    • 3.RTC闹钟配置
  • 总结


前言

本章是基于RT-Thread studio实现RTC硬件和软件下的日历时钟功能,开发板是正点原子的STM32F4探索者,使用的RT-Thread驱动是5.1.0。
有关于RTC的介绍和cubemx配置参数含义可以看看这篇文章
基于STM32F4的cubemx关于RTC配置说明


一、RT-Thread工程创建

从以前文章得到驱动5.1.0不报错工程
在这里插入图片描述

1.硬件RTC配置

先按照/* RTC CONFIG BEGIN */的STEP的1、2、3配置一下。注意先不要使用软件模拟RTC,先使用硬件模式。如果你目前的开发板没有硬件RTC,那么也先这么操作。
如果不出意外,你将会得到以下的报错和警告
在这里插入图片描述
第一处错误,对于5.1.0版本来说,RT_WEAK改成了小写rt_weak,我们改过来。吐槽一下,RT-Thread studio的编译,报错信息一点都不准。
在这里插入图片描述
改正后,报错减少。这里的错误是参数类型不匹配的错误。
在这里插入图片描述
结构体参数如下

struct rt_rtc_ops
{rt_err_t (*init)(void);rt_err_t (*get_secs)(time_t *sec);rt_err_t (*set_secs)(time_t *sec);rt_err_t (*get_alarm)(struct rt_rtc_wkalarm *alarm);rt_err_t (*set_alarm)(struct rt_rtc_wkalarm *alarm);rt_err_t (*get_timeval)(struct timeval *tv);rt_err_t (*set_timeval)(struct timeval *tv);
};

报错函数参数如下

static rt_err_t stm32_rtc_get_secs(void *args)
static rt_err_t stm32_rtc_set_secs(void *args)
static rt_err_t stm32_rtc_get_timeval(void *args)

可以看到形参不匹配,把函数形参改过来就行

static rt_err_t stm32_rtc_get_secs(time_t *args)
static rt_err_t stm32_rtc_set_secs(time_t *args)
static rt_err_t stm32_rtc_get_timeval(struct timeval *args)

这样,就没有报错和警告了。接下来按照手册上函数**set_date()set_time()**来设置日期和时间也不会有问题。
下载后,可以看到硬件RTC正常工作。
在这里插入图片描述

2.软件RTC配置

去设置里面打开软件RTC。编译有一个警告说结构体rtc_sync_work没有使用,这不影响。
在这里插入图片描述
下载下去,msh控制台反馈报错,我们可以看到报错文件时drv_rtc,内容是rtc创建错误。
在这里插入图片描述
我们找到报错语句,可以看到,这里是设备名称时 “RTC”,但是现在使用软件模拟RTC,那么设备名称将变成 “soft_rtc”,更改一下,发现下载后控制台不报错。可以和硬件定时器一样正常使用
在这里插入图片描述

3.RTC闹钟配置

目前RT-Thread好像并没有晚上闹钟alarm的配置,我也尝试着自己配置了一下,但是一直不成功。确实,之前裸机操作时也没有关心过RTC,对RTC的硬件基础理解不够,有些地方无从下手了。在RT-Thread的论坛有很多博主有关于这方面的文章,实在有需要可以看看他们的。


总结

本章是基于RT-Thread studio实现RTC硬件和软件下的日历时钟功能,对于闹钟功能还未实现,哪天实现了,再补充。

http://www.xdnf.cn/news/605557.html

相关文章:

  • ATGM332D-F8N22单北斗多频定位导航模块
  • SQLMesh Typed Macros:让SQL宏更强大、更安全、更易维护
  • 【闲聊篇】java好丰富!
  • RabbitMQ配置环境变量
  • onnx模型转入rknn3399平台上工作记录
  • React从基础入门到高级实战:React 基础入门 - JSX与组件基础
  • 深入解析Java类加载机制:双亲委派模型
  • Halcon计算点到平面的距离没有那么简单
  • Spring Boot微服务架构(一):如何拆分?如何将CRM系统拆解为多个微服务构建?
  • Spring Boot集成Resilience4j实现微服务容错机制
  • 亚马逊云科技推出Anthropic新一代模型
  • 电子电气架构 --- 下一代汽车电子电气架构中的连接性
  • 传输层协议TCP
  • 撤销Conda初始化
  • 基于BoxMOT的目标检测与跟踪全流程详解
  • OpenCV CUDA 模块中图像过滤------创建一个拉普拉斯(Laplacian)滤波器函数createLaplacianFilter()
  • 【python实用小脚本-79】[HR转型]Excel难民到数据工程师|用Python实现CSV秒转JSON(附HRIS系统对接方案)
  • 蓝桥杯国14 互质
  • 取消100+零售商加价!塔吉特Circle 360会员体系重构逻辑
  • Appium+python自动化(三)- SDK Manager
  • Axure高保真CRM客户关系管理系统原型
  • uniapp实现得到本地系统目录文件,获取文件信息
  • 材料星AI对话写作让写作不再孤军奋战
  • 【笔记】JetBrains 数据迁移与符号链接操作
  • Java常用数据结构底层实现原理及应用场景
  • C# 高效读取大文件
  • JVM 性能优化终极指南:全版本兼容、参数公式与场景实战
  • 百度飞桨PaddleOCR 3.0开源发布 OCR精度跃升13%
  • C# AutoMapper对象映射详解
  • 从细胞工厂到智能制造:Extracellular 用时序数据库 TDengine 打通数据生命线