Hello,亲爱的读者们!小编自去年暑假以来,在51自学网这个平台,学习51单片机和stm32单片机等一些知识。由于小编所处的专业就是电气自动化,所以很有必要学习这方面的内容。同时,小编利用寒假的时间,结合自己所学习的知识,开发了一款基于stm32的多功能时钟。
在最近的时间里,我一直在51自学网平台上学习stm32。由于自己有51单片机的基础,并且有黄祁龙老师的stm32讲解视频,就连开发板也是黄老师设计的,所以学习起来还算不那么麻烦。在加上自己之前用过arduino和51做过一些小制作,所以在制作多功能时钟之前,心里有了些底气。
由于我之前未做过stm32的实际项目,所以我就结合老师所讲解的基础知识,以及板子的特点,开发一款多功能时钟,以此来提高自己的实际动手能力。当然,在制作过程中,伴随着调试的艰辛和无望,也交织着成功的喜悦和乐趣。总之,在不断的编程调试的过程中,我收获了不少的东西。
下面,我将阐述关于本次制作的相关介绍。
1.任务需求
在项目研发阶段之前,肯定有客户需求或者项目任务,这里我就拟定了一下:
基本要求:
1.具有显示时间的功能,并且能够通过按键调节时间。
2.具有温湿度测量并显示的功能,并且能够通过按键分别设置阈值上下限,若超过阈值,则蜂鸣器持续报警。
3.具有空气质量检测装置,若空气中的尘埃超过某一数值时,则蜂鸣器持续报警,同时启动空气净化装置(这里以电机来代替)。
4.以上所有内容通过LCD12864液晶显示屏实时显示。
附加要求:
1.设计美化的人机交互界面(UI)。
2.具有测距功能,并且可以通过按键设定安全距离,当测定距离小于安全距离时,蜂鸣器报警。
3.具有蓝牙通信功能,达到实时显示与监控。
注:报警可以开启相应的指示灯(温度、湿度、空气、距离)
2.硬件分析
1.最小系统:stm32f103c8t6、电源、晶振电路、复位电路等
2.显示模块:采用LCD12864液晶显示屏,实时显示数据。
3.按键控制模块:采用独立按键,具有切换页面、设置相关参数等功能。
4.温湿度采集模块:采用DHT11温湿度传感器,内部集成AD转换模块,实时采集温湿度
5.空气质量检测装置:采用MQ2检测空气质量,实时采集空气污染物指数
6.测距模块:采用HC-SRO4超声波模块,实时测量距离值
7.数据通信模块:采用HC-05蓝牙模块,搭建上位机与下位机的通道
8.报警模块:采用有源蜂鸣器和LED灯,起到报警提示。
9.电机驱动模块:采用L298N驱动板,驱动直流电机,代替空气净化装置
注:这里直接采用51自学网研制的stm32开发板,模块化研制的,有核心板(最小系统板)、主板和显示板(主要LCD12864)等。
3.开发环境
由于51自学网授课老师推荐用IAR,这里我采用IAR作为开发工具。当然,keil MDK也是比较流行,适合stm32的开发工具。当然,两者在配置环境上略有差异,由于本人学stm32时没用过keil MDK,这里不再阐述。
本次开发之前,需要创建库函数模板,这样,开发效率更高。如果有不知道如何创建的,请参考51自学网黄祁龙老师的《STM32单片机嵌入式实战教程》的第二章,里面会教你怎么使用IAR以及如何建立固件库模板。
当然,stm32也是可以和51一样,通过寄存器进行开发,但如果那样子的话,寄存器太多记不住,即使查阅芯片手册,也比较难找。所以站在巨人的肩膀上,何乐而不为呢?
4.软件分析
首先,我们在软件编程前,需要将任务进行模块化。由于本次开发的项目,内容还算比较多的,所以模块化编程的思想尤为重要。
1.显示模块:由于51自学网上老师重点讲过,自己也跟着做过,所以LCD12864的相关库函数已经搭建好,包括显示数字函数、显示字符函数、显示中文字符串函数等,都可以直接调用。
2.计时模块:配置相关的定时器,编写定时器初始化函数,中断计时程序。
3.按键控制模块:配置好相关的按键引脚,需要构建按键扫描函数,用来控制显示部分(主要)的切换页面,参数大小调整,取消报警等。
4.温湿度采集模块:查阅芯片手册,根据时序图,写时序函数,包括读写位函数,读写字节函数,读数据函数等。这里51自学网也有专题阐释。
5.空气质量检测模块:这里需要使用stm32内部ADC模块,配置相关引脚为模拟输入,配置ADC相关的结构体,启动内部AD转换,需要构建ADC初始化函数,和启动采集转换函数。
6.测距模块:这里需要配置TRIG和ECHO引脚,构建定时器初始化函数,启动超声波测距函数,获取时间计算距离函数等。
7.数据通信模块:串口初始化函数,中断接收函数,发送数据函数等,这里还要根据上位机软件,编写相关的通信协议。
其次,需要将stm32的引脚分配给外部器件使用。
控制器引脚分配如上图所示,stm32的引脚分配好即可。其中LCD12864、按键、LED灯、DHT11、有源蜂鸣器、蓝牙通信等,在设计PCB板时,已固定分配好。同时,板子预留了引脚,便于连接其他外设。MQ135、电机驱动和超声波等都通过预留的引脚接入。
最后,就是编写各个模块的程序,并且进行硬件的调试。
5.实物展示
多功能时钟1 多功能时钟2 多功能时钟内部1 多功能时钟内部2在后面的章节中,我将分模块进行讲解多功能时钟的开发,同时结合自己的调试过程,阐述开发过程中遇到的问题。同时由于本人水平有限,难免会出现纰漏,希望广大读者能够多多提出意见,深表感谢!
网友评论