这里我们还是基于STM32F103C8T6这款芯片

首先是按键

按键按下去的瞬间就会有一堆抖动,因为做不到百分百精确,除非用数字开关,或者软件消抖

然后是传感器模块的介绍

一般我们这样子进行接按钮,因这样子I/O口在没有按下的时候就会一直为高电平状态,受到影响小,不容易被外界干扰。当我们按下按钮之后,引脚就变为高电平,不安下时候引脚为高电平。

然后就是我们传感器的接法,AO暂时不用因为我们暂时涉及不到模拟量输入,DO的话我们接在PA0用于读取模块的数字信号。

接下来就是补充一点C语言的知识,各种数据类型和关键字。还有表示的范围以及他的位数。

注意位数是比特位就是存在cpu里面的。

注意long也是32位数据,longlong才是64位。

在32中char也是存储数据的而不是字节,所一他的新名字为,int8_t。

还有宏定义,基本就和C语言的一样了。

这里我们跳转到GPIO_Pin_0的库函数,我们就会发现,GPIO_Pin_0就是宏定义的,代表这0x0001这个值,这也就是为什么我们直接写0x0001这个值也可以点亮led的原因,这里就能解释为什么我们用GPIO_Pin_0也可以做到,地址前面的是强制类型转换,是为了严谨性,我们这里暂时了解就可以,后续会深入。

接下来是typedef,他和宏定义表面上区别就是,宏定义新名字在左边,typedef新名字在右边,宏定义不需要+分号,typedef需要+分号。宏定义任何都可以换,typedef只能给变量类型换名字。

对于命名而言typedef更加安全,因为宏定义就是无脑命名,不会管你对错,只要格式对了就行,而typedef会对变量进行检查如果不是变量类型的名字,那么是不行的,会有错误。所以我们一般给变量重命名会用typedef。

打开我们stm32库函数发现这些都是通过typedef进行命名的。

然后就是C语言的结构体,结构体可以看为数组的进阶版,因为数组是相同元素的集合,那我们如果想把不同数据给结合起来,就会用到结构体,结构体相当于不同数据的集合。

stm32中我们的初始化GPIO的函数,就是一个结构体,引出三个变量,分别是,哪个端口,速度多少,还有设置为什么模式。然后下面的GPIO_IniTypeDef就是我们GPIO的新名字。

然后在主程序我们可以看到都是结构体名字+ . 引出结构体变量,然后进行新的赋值操作。

还有一种新的引用方式,也就是:结构体首地址(结构体指针)-> 结构体变量 = 赋值。

为什么要多一种这个方式呢,是因为,结构体是一个组合的数据类型,所以在函数之间的数据传递中通常用的是地址传递,而不是值传递。既然是使用指针传递(地址)那么子函数得到的就是结构体的首地址这时候就可以用->来找到这个成员

程序中也可以看出,这时候我们看到结构体变量传递给GPIO_Init函数时候传递的是结构的是地址

来到GPIO_Init这个函数就可以看到,这里是用结构体的指针进行数据的接收

引用结构体成员时候,就可以用->来接收的。这里用*来引出指针变量的内容,再用 . 来引用结构体也是可以的。

枚举在定义时候用,(逗号)隔开,然后结构体定义时候用;(分号)隔开

如果枚举变量里面的数值是用顺序定义的那么可以取消赋值,编译器会自动填写数据

在stm32的库中,我们发现enable就是一个枚举变量。

然后我们来进行程序的编写,首先选择PB1和PB11这两个端口作为按键输入的端口。两个LED接入在PA1和PA2两个端口,这里采用低电平点亮的接发,led一段接在端口,另一端接在VCC。

然后我们来到stm32cube,搜索STM32F103C8T6

找到PB1设置为input,因为我们需要用到GPIO的输入。

然后点击右边的GPIO找到详细配置,

将我们的PA7设置为上拉输入模式,PB11同理。

然后将PA1和PA2设置为output也即是GPIO输出模式

选择推挽输出,无上拉下拉,速度暂时可以随意。x

选择为我们生成.c和.h文件

记得选择MDK-ARM因为我们用的是keil5

然后生成文件

生成成功我们点击中间的打开。

然后我们看到,他为我们每个外设增加了独立的函数,这样子方便我们管理代码。

我们需要用到这个代码,用来读取gpio接口的当前值

我们将程序写道我们的whle循环里然后我们编译下载,并且查看结果

这是我们的接线

按下连接PB1的按钮,发现PA1灯亮

按下连接PB11口的按钮,发现PA2口的灯亮

这就是我们的整个过程,当然我写的代码都是最基础的,可以进行改正,主要我们就是学习HLA这个库函数,以后的学习我都会记录成为笔记,我也会写没有实物的话,如何进行HAL库的仿真,欢迎大家指点。拜拜

zhzh

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐