一、准备过程:
开发工具:Cubemx(非ide版本,需要与keil5联合使用),keil5
硬件工具:江协资料包(仅使用面包板,按键,跳线,LED灯,OLED屏幕电阻,ST_Link下载器等)
二、实验设计思虑、流程与效果呈现:
1、实现LED点亮功能
1、点击此处新建工程
2、在该搜索框进行搜索STM32F103C8,即可出现f1最小系统板(f103c8t6使用的否03C8Tx)
双击下图中的字样(截图的时候挡住了,多担待)
3、芯片选择好以后配置SYS的Debug选项为Serial Wire
4、配置RCC的时钟为Crystal/Ceramic Resonator
5、配置右侧芯片的GPIO口的输入输出口,配置PA2为GPIO_Output,驱动1个LED灯
(先点个灯,下方第一个图是配置1个灯,第二个图是配置了两个灯并且修改了左侧的该GPIO的初始输出引脚的电平,可直接看第二个灯的配置自行配制)
第五步选择该IO口的输出电平
6、配制使能时钟
第一步找出时钟树,第二部修改该处时钟,F1的话,外部最高时钟为72MHz,直接改为72,回车,回车后可能有弹窗,不用管,必须点击OK,让它自动配置时钟树
成功图
7、修改工程的详情(名称路径一类)
该界面向下滑(可不用,如果你下载了最新版本的固件包)
8、选择该处进行生成对应启动外设的.c/.h文件(图3是启用多个I/O口进行LED灯输出的设置GPIO口的图,有兴趣可以看看)
9、在keil5中(有些配置我没说,这里用不到,因为我不打算新建.c和.h文件,我能力有限,本次工程代码太简单,不需要那么多文件)
(该图第七步不是点击add,是点击下方确定,之后在点击一个OK,我不想换图了)
10、随便写几句代码
2、实现OLED点亮与字符显示(4引脚OLED)
第一步:复制启动代码进入工程,还是要新建一个文件夹【尬笑】,复制文件
图1:新建一个名为BSP的文件夹,
图2:复制三个文价,这三个文件可以驱动四引脚的OLED屏幕,驱动函数我待会儿写
第二步:将文件夹与文件添加至工程中
成功后这里会出现一个这个,一定要检查有没有!!!没有就是添加不成功 以后所有的文件与文件夹的添加皆是如此
第三步:进行Cubemx配置(很简单、就两张图几步,与OLED通信使用I2C)
注:若工程打开,则不要重复打开工程,然后回keil5一直点击是是是!!!
(若发现你以前弄得BSP没在工程中,别紧张,重新加一边或者关了工程重开)
(或者看看你在C/C++界面的东西是否添加正确)
下面修改keil5中的代码,检查其是否正常,第三行输出GGE
3、实现基本定时器进行定时
Cubemx设置:
使能其中断(设置1秒钟中断触发1次,用来当时间的倒计时)(一个多用我试过了,没反应)
keil5的设置:
4、实现按键功能(定时器产生中断)
cubemx对按键引脚进行初始化:
重新使能一个计数器,对按键扫描时间中断进行计数:
在keil5进行设置:
首先:在main.c中定义一个key的结构体进行消抖,具体方法:
if(htim->Instance == TIM4)
{
key[0].key_sta = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12);
key[1].key_sta = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_13);
key[2].key_sta = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14);
for(int o = 0;o<3;o++)
{
switch (key[o].key_num)
{
case 0:
{
if(key[o].key_sta == 0)
{
key[o].key_num = 1;
}
}
break;
case 1:
{
if(key[o].key_sta == 0)
{
key[o].key_num = 2;
key[o].key_flag = 1;
}
else
{
key[o].key_num = 0;
}
}
break;
case 2:
{
if(key[o].key_sta == 1)
{
key[o].key_num = 0;
}
}
break;
}
}
}
至此按键已经实现,调用按键只需要使用key[o].key_flag == 1即可。每次调用结束要手动将按键标志位清零,防止重复调用。
5、实现各个功能的联合产生一个简易的交通灯
我懒得写了,直接上工程吧,基本功能都实现了,只需要再打包组装一下就可以直接出结果了(功能:按键按下进行时间的加减功能,能对三个数值分别进行加减功能(红绿黄三个灯都可被加减))
电路连接:PA2~PA7连接LED与地
按键电路:(电阻用1k的,2端口接PB12,三个按键分别接12,13,14)
OLED的四个引脚,一个接电源,一个接地,另外俩接法看Cubemx的图
到此结束。
我不会上传视频,放俩图意思意思吧。(发现个bug,有一行显示忘了没打空格,会出现胡乱显示(那个80就是,后面一位没有清屏,是之前的计数的残留))
链接:https://pan.baidu.com/s/1l3stFHT9YbioSaVkmtg_AA
提取码:uj4z