【用定时插座项目介绍STM32F103单片机外设应用和STM32CodeMX的使用(一)——原理设计:继电器/0.96寸OLED/轻触开关/时钟晶振32768】


前言

笔者拥有一个老旧平板,现在将其装在相框里,当作桌面钟表使用。平板需要充电,但是为保护电池,不想一直插着充电线,同时又不想频繁拿出来充电。因此,需要一种能定时给平板充电的装置(开关)。

市面上有此类智能插座,可以自由改变一天的某个时段的通断。究其核心,这种产品无外乎具有如下技术内容:
1、时钟系统;
2、人机交互,指令输入、信息显示等;
3、市电开关装置,固态或者线圈继电器;
在这里插入图片描述

笔者掌握的嵌入式技术完全可以实现以上技术要求:

1、主要为平板、手机等小功率设备供电,可以继电器开关方面可以有多种选择;

2、使用OLED液晶显示屏(Organic Light-Emitting Diode)做显示输出设备,OLED屏结构小巧,0.96寸;分辨率为 128*64,可以自由发挥显示内容;具备多种标准接口,作为嵌入式设备操作容易,而且价格便宜,备品备件还很容易获得;

3、这个项目使用STM32单片机,这次可以使用STM32CodeMX对硬件资源方便地配置,STM32CodeMX是STM32 芯片图形化配置工具,可以节省出开发者的前期准备工作,借此项目对这个工具做一次全面学习;


一、原理、功能、选型介绍

整体外形

将这块PCB,装进这样的壳子里。对外的接口如下:

1、市电输入,直接接到里面的充电适配器;
2、USB-A型口,外接平板的充电线,也可以接其他5V设备的充电线;
3、4个轻触开关,用来输入指令,包括设置时间一类的操作
在这里插入图片描述

壳子是透明的,可以看到OLED屏显示的内容
在这里插入图片描述

原理图

这块电路板的原理图如下:
在这里插入图片描述

关键器件选择和功能介绍

1、U2是STM32F103C8T6单片机,选这个芯片除了性能足够,另外原因是可以使用hal库进行开发,并且使用STM32CodeMX工具方便地进行资源配置,STM32CodeMX能让开发者把主要精力放在算法实现上;

2、RELAY1是5V线圈的小功率继电器,在电路中,它负责对外的USB1端口5V回路通断。本设计仅控制直流5V回路的通断,而不是交流220V,主要考虑到制作更容易;

3、OLED屏,0.96寸,128*64像素;具有7个引脚,可以配置成4脚SPI、 3脚SPI, 以及IIC通讯方式;
在这里插入图片描述

4、CN1端口直接接5V适配器的输出,这个5V电源同时要给单片机系统供电,包括LDO芯片、继电器线圈、蜂鸣器等等;

5、配置了四个轻触开关:KEY1~KEY4,初步设计是“确认”、“上翻”、“下翻”、“返回”;

6、设计了X1晶振32768Hz,作为显示时间的时钟源;STM32单片机有VBAT电源输入端,这里设计了B1锂电池,保证断电时时钟继续走时;

7、拓展功能,BUZZER1蜂鸣器,丰富人机交互;U3是温度传感器18B20,监测环境温度;

二、STM32CodeMX配置步骤

1.新建项目

1、生成代码的路径要求是非中文的,所以在此先准备一个合适的文件夹;
在这里插入图片描述
2、打开软件
File->New Project新建一个项目
在这里插入图片描述
3、将会出现芯片选择的界面,在Part Number Search里,选择本项目使用的单片机型号:STM32F103C8T6
在这里插入图片描述
4、在下方会出现芯片信息,在这里双击,之后芯片的图形赫然呈现

在这里插入图片描述
5、时钟配置
按照红框内配置,特别是要选择32.768kHz的时钟选项,这样才能使用时钟晶振
在这里插入图片描述
6、配置I/O管脚

回到Pinout & Configutation页面,在左侧GPIO选项里,对所用的管脚进行配置,在右侧芯片图形界面里,打上“图钉”标记的就是已经配置过的管脚;这里将管脚的输出电平、是否上拉或者下拉、管脚的标签名称都做了设置;

下图是已经根据原理图配置完毕的状态,如图:将KEY1~KEY4配置成了外中断,其他都是普通I/O

在这里插入图片描述
7、配置调试管脚
本项目将单片机配置为串行调试接口,也就是SW接口,进入SYS->Dubug选择Serial Wire,可见在右边的芯片图形里,PA13被配置成SWDIO,PA14配置成SWCLK

在这里插入图片描述
8、配置定时器资源
配置基础定时器TIM1,在程序中分配时间之用,在左侧Times选项里,选择TIM1;
在这里插入图片描述

在时钟源Clock Source 里选择内部时钟 Internal Clock,这表示使用了APB1时钟,即72MHz
在这里插入图片描述

这里设计的时钟周期是1ms,根据选择的定时器时钟72MHz,在这里进行预分频值Prescaler计数值Count Period的配置

Prescaler 选择72-1,这里计时时钟频率是72MHZ / 72=1MHZ。因为单片机计数是从0开始计,所以要-1,这样定时器1的计数频率变成了1MHz,也就是1us计数一次;

计数值Count Period也就是重新装载值,也就是记多少次数重新来过呢,这里设计为定时周期是1ms,也就是记到1000us重新开始记,这里就配置成1000-1,同样地因为单片机是从0开始计数的,所以要-1
在这里插入图片描述
再在NVIC Setting选项里,将TIM1 update interrupt的使能勾选上,这样就可以激活并使用TIM1的中断功能。
在这里插入图片描述

2.生成代码

经过以上配置,接下来可以生成代码了.
1、进入Project Manager 选项卡,在左侧Code Generator选项,点选第一个,将所有HAL库文件拷入代码中;
在Code Generated files ,勾选上第一个,产生库函数.c文件和头文件.h

在这里插入图片描述
2、在Project选项卡里,在Project Name里,给项目起一个名字;
在Project Location里,给项目指定路径,注意路径不能有中文,在这里直接将项目保存在D盘根目录下,生成代码的同时,软件会生成文件,并以项目名称做文件夹名字;
在编译器选择里,选择MDK-ARM V5,笔者一直使用MDK做嵌入式编程工作

在这里插入图片描述
3、最后一步是生成代码,点击右上角GENERATE CODE按钮,即可生成代码
在D盘根目录下会生成TimedSocket文件夹,包括了项目文件、驱动源文件、库函数,并且STM32CodeMX的配置文件也在里面

在这里插入图片描述
在这里插入图片描述


总结

1、本项目使用了STM32F103单片机、OLED屏、继电器、输入按钮、时钟系统,设计一个定时器开关设备;
2、通过STM32CodeMX工具生成代码,简单几步配置,可以为程序开发节省出宝贵时间;
3、注意新建的STM32CodeMX项目路径不能有中文;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值