基于STM32的智能万年历设计

[注:该文章排版有点错乱,如果需要,有PDF版本和WORD版本可供下载观看,还有包括工程项目和成果视频,请移步下载资源]

1 设计任务及要求
1.1 引言
本文提出了一种基于 STM32 的智能万年历设计方案,本文案以 STM32F103C8T6 最小
系统作为主控核心,与 OLED 显示、 DS18B20 温度传感器、 DST11 温湿度传感器等模块组
成硬件系统。 其中以 STM32 内部的 RTC(实时时钟) 实现日历和时间的功能,通过修改计
数器的值可以重新设置系统的当前时间和日期。综上所述,此电子时钟具有读取方便、
显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋
势,具有广阔的市场前景。
1.2 功能要求
(1) 系统组成:
系统选用 STM32F103C8T6 单片机为微处理器, 使用各模块实现万年历的功
能。
(2) 实现功能:
1) 在 OLED 显示屏上显示实时的日期和时间。
2)具有闰年的自动调整功能。
3)能够显示实时温度。
4)能够显示实时湿度。
(3) 模块组成:
STM32 单片机最小系统、 OLED 显示模块、温度传感器模块、湿度传感器模
块;
2 设计方案
2.1 可选择的芯片方案
整个系统用 STM32F103 单片机作为中央控制器,由单片机采集内部 RTC 值,时钟信
号通过单片机 I / O 口传给 OLED, 单片机模块控制驱动模块驱动显示模块,通过显示模
块来实现信号的输出、 OLED 的显示及相关的控制功能。
方案 1:采用 89C51 芯片采用 89C51 芯片作为硬件核心,采用 Flash ROM,内部具有
4KB ROM 存储空间,能于 3V 的超低压工作,而且与 MCS-51 系列单片机完全兼容,但是运
用于电路设计中时由于不具备 ISP 在线编程技术,当在对电路进行调试时,由于程序的
错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的
损坏。
方案 2: 采用 STM32 单片机。 STM32F103C8T6 是一款基于 ARM Cortex-M 内核 STM32
系列的 32 位的微控制器,程序存储器容量是 64KB,需要电压 2V ~ 3.6V,工作温度为-
40° C ~ 85° C。 主要性能有:与 MCS-51 单片机产品兼容、 37 个可编程 I/0 口线、 贴片
8M 晶振(通过芯片内部 PLL 最高可达 72M)、支持 JTAG/SWD、 20K RAM, 64K ROM, 16 位
的定时、计数器、 中断源、全双工 UART 串行通道等。 价格相对较便宜, 从单片机芯片主
要性能角度和价格优势出发,本设计的智能万年历单片机芯片选择设计采用方案采用
STM32F103C8T6。
2.2 显示模块选择方案
方案 1: 采用 OLED 显示模块
OLED 显示模块的显示功能强大,可显示大量文字图形显示多样,清晰可见,显示质
量高没有电磁辐射,可视面积大, 数字接口,匀称小巧, 功耗小。 应用范围较广,常被
用于智能手表,智能手环等设备的显示。 相对于 LCD 来说, OLED 是自发光的,不需要背
光。
方案 2: 采用点阵式数码管显示
动态显示,即各位数码管轮流点亮, 对于显示器各位数码管, 每隔一段延时时间循
环点亮一次,利用人的视觉暂留功能可以看到整个显示,但需保证扫描速度足够快,人3
的视觉暂留功能才可察觉不到字符闪烁, 显示器的亮度与导通电流、 点亮时间及间隔时
间的比例有关。 调整参数可以实现较高稳定度的显示,动态显示节省了 I/O 口,降低了
能耗。
从节省单片机芯片 I/O 口和降低能耗角度出发,本设计采用 OLED 显示。
2.3 温湿度模块的选择方案
湿度测量模块选择: DHT11 传感器包括 1 个电阻式感湿元件和 1 个 NTC 测温元件,并
与 1 个高性能 8 位单片机相连接。单线制串行接口,使系统连接可以更简洁。功耗极
低,信号传输距离可达 20 m 以上。作为一种新型的单总线数字温湿度传感器, DHT11 具
有体积小、功耗低、响应速度快、抗干扰能力强、控制简单、性价比高等优点,能够广
泛应用于各个领域。
温度测量模块的选择: DS18B20 的测温范围-55℃~ 125℃,分辨率最大可达
0.0625 ℃。 DS18B20 可以直接读出被测温度值。而且采用 3 线制与单片机相连,减少了
外部硬件电路,具有低成本和易使用的特点。 DS18B20 是 Dallas 半导体公司的数字化
温度传感器,它是一种支持 “一线总线”接口的温度传感器。 支持联网寻址,简单的网
络化的温度感知,零功耗等待等特点。 相比于 DHT11 温湿度模块的温度测量, DS18B20 温
度模块测量的温度更加精准,误差小。
因此,本设计采用 DHT11 温湿度模块和 DS18B20 温度模块分别作为湿度测量和温度
测量使用。4
3 整体电路设计
本设计采用 STM32F103C8T6 作为 MCU,由内部的实时时钟(RTC) 实现日历功能,利
用外部连接的 DHT11 温湿度传感器和 DS18B20 温度传感器模块作为信号采集,并在 OLED
上进行显示。
3.1 整体电路框图
STM32F103C8T6
单片机
OLED 显示
DHT11 温湿度模块湿
度测量
DS18B20 温度模块温
度测量5
3.2 整体电路接线图6
4 单元电路设计
4.1 单片机的介绍
本设计采用的是 STM32F103C8T6 最小系统板, 该单片机是基于 ARM Cortex-M3 内核
的微控制器,主作用是程序的执行和外部电路的控制。
4.1.1 MCU
STM32F103C8T6 单片机是基于 ARM Cortex-M3 内核的微控制器,主要作用是程序的
执行和外部电路的控制。
4.1.2 晶振电路
为了提供更为精准的时钟信号,单片机采用外置时钟电路,主要由晶振、电容、电
阻构成的。单片机内部振荡器在外部晶振、电容的作用下产生自激振荡,为单片机提供
12MHz 的正弦信号。时钟电路相当于单片机的心脏,它的每一次跳动(振荡节拍)都控制着
单片机执行代码的工作节奏。振荡得慢时,系统工作速度就慢;振荡得快时,系统工作速
度就快。7
4.1.3 复位电路
最简单的复位电路由电容串联电阻构成; 电容的电压不能突变的,当系统一上电,单
片机的 RST 脚将会出现一个持续的高电平,并且,这个高电平持续的时间由电路的电容值
来决定。 STM32 单片机的 RST 脚检测持续到 20us 以上的高电平后,会对单片机进行复位
操作。所以,适当组合 RC 的取值就可以保证可靠的复位。
4.1.4 系统电源
由于我们使用的电源适配器产生的直流电压为 5V,单片机的工作电压为 3.3V。所以
需要对电压进行降压处理。89
4.1.5 SWD 调试下载接口
此电路可供用户进行程序调试和下载。
在设计中, 单片机的硬件接线如图所示
4.2 OLED 显示模块介绍
本次设计采用的 IIC 接口的 0.96 寸 OLED,该 OLED 的分辨率为 128*64, 屏幕为黄
蓝屏,黄屏为屏上的 1/4 部分为黄光,下 3/4 部分为蓝光,颜色和显示区域无法修改。10

  1. GND 接地
  2. VCC 电源(3 ~ 5.5 V)
  3. SCL OLED 的 D0 脚,在 IIC 通信中为时钟管脚
  4. SDA OLED 的 D1 脚,在 IIC 通信中为数据管脚
    在设计中, OLED 显示模块的硬件接线如图所示11
    4.3 DHT11 温湿度传感器介绍
    DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它
    应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的
    长期稳定性。传感器包括一个电阻式感湿元件和一个 NTC 测温元件,并与一个高性能 8
    位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比高等优
    点。每个 DHT11 传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式
    存在 OTP 内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串
    行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用甚至
    最为苛刻的应用场合的最佳选择。产品为 3 针单排引脚封装,连接方便。
    在设计中,该温湿度传感器模块的硬件接线如图所示:12
    4.4 DS18B20 温度传感器介绍
    DS18B20 温度传感器具有体积小,硬件开销低,抗干扰能力强,精度高的特点,主要
    根据应用场合的不同而改变其外观,可用于电缆沟测温、锅炉测温、机房测温、农业大
    棚测温等各种非极限温度场合,适用于各种狭小空间设备数字测温和控制领域。
    在设计中,该温度传感器模块的硬件接线如图所示:13
    5 软件编程设计
    5.1 主程序流程图
    开始
    初始化 OLED、系统时钟、
    RTC、 各个模块等
    判断是否初始
    化完成
    刷新时间
    正常显示
    结束
    等待初始
    是 化完成
    否14
    5.2 OLED 显示程序设计
    显示部分程序的设计步骤为,先确定 OLED 在 STM32 的 IO 连接方式; 然后初始化
    OLED,即向内写入一系列的设置程序, 来启动 OLED 的显示; 之后对显示部位进行相关
    的配置;最后通过调用字库等进行显示并配置相关的字符,汉字等。
    开始
    配置 STM32 与 OLED 相连
    的 IO 口的电气属性
    初始化 OLED
    通过编写设计程序将要显示的汉
    字、字符等显示在屏幕的合适位置
    结束15
    5.3 时钟程序设计
    基于 ARM Cortex-M3 内核的 STM32 其本身包含一个独立的定时器——实时时钟
    (RTC),由于其拥有一组连续的计数器这一特性,我们就可以通过在相应软件的配置下,
    来实现时钟日历的功能。若想重新设置系统当前的时间和日期,则可通过修改计数器值
    的方法来实现。该款单片机的 RTC 模块和时钟配置系统(RCC_BDCR 寄存器)处于后备
    区域(BKP),这将导致系统复位或从待机模式中唤醒后,对后备寄存器和 RTC 的访问被禁
    止,之前对 RTC 模块的设置和时间会不会出现变化。其优点在于防止对于后备区域意外
    的写操作。
    RTC 的组成包含两个部分,第一部分是 APB1 接口,除了用于和 APB1 总线相连,
    还包含一组 16 位的寄存器,是通过 APB1 总线来对其进行读写操作。这一部分是由
    APB1 总线时钟驱动来与 APB1 总线接口的。第二部分是 RTC 核心,由一组可编程计数
    器组成,主要分为两个模块: RTC 预分频模块和一个 32 位的可编程计数器。其中 RTC
    预分频模块包含一个 20 位的可编程分频器被称作为 RTC 预分频器,如果在 RTC_CR 寄
    存器中将相应的位设置为允许位,就会在每个 TR_CLK 周期 RTC 产生一个秒中断。模块
    二可以被初始化为当前的系统时间,将系统的时间按 TR_CLK 周期累加并与存储在
    RTC_ALR 寄存器中的可编程时间进行比较,如果 RTC_CR 控制寄存器相应位设置成允许
    位,在比较匹配时就会产生一个闹钟中断。
    总体来说 RTC 包含以下几个特性:
    (1)可编程的预分频系数最高可达 2^20。
    (2)2 个分离的时钟: PCLK1 和 RTC 时钟(RTC 时钟的频率必须要小于 PCLK1 时钟
    频率的 14 以上)。
    (3)可用于较长时间段进行测量的 32 位可编程计数器。
    (4)包含三种 RTC 的时钟源: HSE 时钟除以 128;LSE 低速外部时钟; LSI 低速内部时
    钟。
    (5)由系统复位的 APB1 接口而 RTC 核心(预分频器、闹钟、计数器和分频器)只能
    由后备域复位,这两者之间是相互独立。
    (6)专门的可屏蔽中断包含 3 个:闹钟中断–用来产生一个软件可编程的闹钟中断;秒
    中断–用来产生一个可编程的周期性中断信号(最长可达 1 秒) ;溢出中断–指示内部可编
    程计数器溢出并回转为 0 的状态。16
    RTC 的简化框图如图所示:
    在进行编写 RTC 时钟程序时是以 1970 年 1 月 1 日为基准, 把输入的时间转换为秒
    钟,程序编写的合法年份是 1970-2099 年。星期的判断是利用蔡勒(Zeller)公式:
    w=y+[y4]+[c4]-2c+[26(m+1)10]+d-1,式中的符号含义如下 w:星期; c:世纪-1;y:年(后两位
    数) ;m:月(m 大于等于 3,小于等于 14,即在蔡勒公式中,某年的 1、 2 月要看作上一年的
    13、 14 月来计算,比如 2003 年 1 月 1 日要看作 2002 年的 13 月 1 日来计算) ;d:日; []代
    表取整,即只要整数部分。将算出来的 w 除以 7(若算出的 w 是负数则将 w 加 7 直至 w 大
    于零后再除以 7),余数是几就是星期几。如果余数是 0,则为星期日。
    时钟的程序流程图如图所示:17
    5.4 温度传感器模块的程序设计
    DS18B20 的 64 位序列号排列是:前 8 位是产品家族码,接着 48 位是 DS18B20
    的序列号,最后 8 位是前面 56 位的循环冗余校验码(CRC=X8+X5 +X4 +1)。 ROM 作
    用是使每一个 DS18B20 都各不相同,这样就可实现一根总线上挂接多个。
    所有的单总线器件要求采用严格的信号时序,以保证数据的完整性。 DS18B20 共有
    6 种信号类型:复位脉冲、应答脉冲、写 0、写 1、读 0 和读 1。所有这些信号,除了
    应答脉冲以外, 都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在
    前。
    1)复位脉冲和应答脉冲
    单总线上的所有通信都是以初始化序列开始。主机输出低电平,保持低电平时间至
    少 480us,以产生复位脉冲。接着主机释放总线, 4.7K 的上拉电阻将单总线拉高,延时
    15~60 us, 并进入接收模式(Rx)。接着 DS18B20 拉低总线 60~240 us,以产生低电平应
    答脉冲, 若为低电平,再延时 480 us。
    2)写时序
    写时序包括写 0 时序和写 1 时序。所有写时序至少需要 60us,且在 2 次独立的写
    时序之间至少需要 1us 的恢复时间,两种写时序均起始于主机拉低总线。写 1 时序:主
    机输出低电平, 延时 2us,然后释放总线,延时 60us。写 0 时序:主机输出低电平,延
    时 60us,然后释放总线, 延时 2us。
    3)读时序
    单总线器件仅在主机发出读时序时,才向主机传输数据,所以,在主机发出读数据
    命令后, 必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要 60us,且
    在 2 次独立的读时序之间至少需要 1us 的恢复时间。每个读时序都由主机发起,至少拉
    低总线 1us。主机在读时序期间必须释放总线,并且在时序起始后的 15us 之内采样总线
    状态。典型的读时序过程为: 主机输出低电平延时 2us,然后主机转入输入模式延时
    12us,然后读取单总线当前的电平,然后延时 50us。
    DS18B20 的典型温度读取过程为:复位——发 SKIP ROM 命令(0XCC) ——发开
    始转换命令(0X44) ——延时——复位——发送 SKIP ROM 命令(0XCC) ——发读
    存储器命令(0XBE) ——连续读出两个字节数据(即温度)——结束。18
    5.5 温湿度传感器模块的程序设计
    DHT11 数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输
    出双向传输。其数据包由 5Byte(40Bit)组成。数据分小数部分和整数部分,一次完整
    的数据传输为 40bit,高位先出。 DHT11 的数据格式为: 8bit 湿度整数数据+8bit 湿度
    小数数据+8bit 温度整数数据+8bit 温度小数数据+8bit 校验和。其中校验和数据为前四个
    字节相加。 传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之
    间应该分开处理。 例如:某次从 DHT11 读到的数据如图所示:
    由以上数据就可得到湿度和温度的值,计算方法:
    湿度= byte4 . byte3=45.0 (%RH)
    温度= byte2 . byte1=28.0 ( ℃)
    校验= byte4+ byte3+ byte2+ byte1=73(=湿度+温度)(校验正确)
    可以看出, DHT11 的数据格式是十分简单的, DHT11 和 MCU 的一次通信最大
    为 3ms 左右, 建议主机连续读取时间间隔不要小于 100ms。
    DHT11 的数据发送流程如图所示:
    首先主机发送开始信号,即:拉低数据线,保持 t1(至少 18ms)时间,然后拉高数
    据线 t2(20~40us)时间,然后读取 DHT11 的响应,正常的话, DHT11 会拉低数据
    线,保持 t3(40~50us) 时间,作为响应信号,然后 DHT11 拉高数据线,保持 t4
    (40~50us)时间后, 开始输出数据。1920
    6 系统联调设计
    程序调试主要以软件调试和在开发板上进行实际运行两种方式相结合。软件调试时
    现在 MDK5 上进行程序的编写、调试,找出程序中命令的错误并修改。当软件调试无错
    误后生成以.hex 结尾的文件,再将此文件通过 ST LINK 烧录到开发板的 STM32F103C8T6
    芯片上,观察运行结果是否和自己期望的结果相同,如若不同可找到程序中该不同的部
    分进行修改,直至达到自己的要求。
    实际运行结果如图所示:
    在屏幕顶端中间显示汉字点阵为 16*16 的“智能万年历”, 第二行显示对应的年月日
    和星期,第三行显示时分秒和湿度,在最后一行显示温度和作者的信息。
    该设计基本能够实现设计要求。21
    7 心得体会
    本次设计的智能万年历系统采用了模块化设计方式,以单片机 STM32F103C8T6 作为
    主控制模块, OLED 作为液晶显示模块,内部的 RTC 时钟作为实施时钟模块, DS18B20 作
    为温度模块, DHT11 作为湿度传感器模块。 整体程序的开发方式是基于固件库开发, 每一
    个模块的逻辑清晰,目的明确,结构简单,易于编写,调试和修改, 程序的可读性强,
    可以很方便的对程序在保持主体不变的前提下进行局部修改,以达到更好的显示。
    由于设计者水平和设计时间有限,该智能万年历的设计还存在很多不足之处,如没
    有自定义修改时间,整点报时,音乐闹钟等功能。
    在设计之初,由于本人第一次接触到 STM32 实物,对于焊接、 电路设计、程序编
    写、 调试和修改方面存在很多问题,买来的模块也曾因操作不当导致毁坏。在经过向同
    学和老师请教,以及上网查找资料,论坛发帖等方式,顺利地完成了设计。 通过本次设
    计,第一次接触到了嵌入式实物的设计, 使我迈向嵌入式方向了一大步,希望在接下来
    的时间,继续深入的学习嵌入式的相关知识和操作。22
    8 参考文献
    [1]张勇, ARM Cortex-M3 嵌入式开发与实践——基于 STM32F103[M]北京: 清华大学出
    版社, 2017
    [2]正点原子.STM32F1 开发指南(库函数版)
    [3]周立功等.ARM 嵌入式系统基础教程[M]北京:北京航空航天大学出版社, 2005.1
    [4]刘鹏程基于 ARM 的温度测量系统[J.科技信息, 2008(18):77-78
    [5]李宁基于 MDK 的 STM32 处理器开发应用[M]北京航空航天大学出版社, 2008
  • 10
    点赞
  • 2
    评论
  • 38
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值