【铁头山羊STM32】HAL库 1.GPIO部分

每个大标题(小节)对应着一个视频,是用以讲代学的方式,以实用性为基准,所以每小节内部可能有详略和顺序的些许差别。

目录

一、引脚分布

二、IO复用和重映射

三、四种输出模式

四、IO最大输出速度

五、闪灯实验

CubeMX生成代码

用ST-link进行调试

六、bootloader清除程序

七、四种输入模式

八、按钮实验


一、引脚分布

观看STM32F103C8T6最小开发板,

其中,STM32F103C8T6指的是开发板中间的正方形小芯片,

打开STM32cubeMX来看,STM32F103C8T6是这样的:

其中,48个引脚中,

有37个"普通IO引脚"(灰色),

我们编写的程序就是为了控制灰色的"普通IO引脚",

为了简便分为四组:

GPIOA(PA0~PA15)、

GPIOB(PB0~PB15)、

GPIOC(PC13、PC14、PC15)、

GPIOD(PD0、PD1);

有11个"特殊功能引脚"(有颜色的),

VDD(A)代表电源正极,

VSS(A)代表电源负极接地(Vss即Vcc,Vss即GND),

VBAT接备用电池(接备用电池),

NRST是芯片的复位引脚(接一个按钮,按下去芯片复位),

BOOT0选择引脚(启动模式选择)。


二、IO复用和重映射

通用功能:直接给某个"普通IO引脚"写入高/低电平,从而发挥作用

复用功能:除了GPIO还能有其他功能,如图

IO复用:同一个引脚具备有多种功能(给用户编程、给芯片上的其他模块使用等功能)

复用功能重映射:将冲突的复用功能移动到备用引脚上去


三、四种输出模式

GPIO的功能就是直接管理芯片四周这一圈引脚,

随便放大一个引脚:

其中,四种输出模式为:

先看推挽与开漏

放大看"引脚放大图"的"输出控制"右侧部分,

两对MOS管可等效为一对开关,

那么就可以得到:

可以总结:

推挽输出:输出低电压或者高电压

开漏输出:输出低电压或高阻抗

通用:通过程序直接控制引脚输出高/低电压

复用:将引脚控制权交给芯片其他模块


四、IO最大输出速度

加快电压的切换速度到一定程度时,

上升沿和下降沿将完全重合:

此时已经不能输出有效的高低电压了,

但我们可以加快上升时间和下降时间,

高/低电压重新变得有效:

我们可以得出:上升/下降时间越短,IO的最大输出速度越大

选取原则就是满足要求的最小值(速度越大,磨损也就越大、更占用带宽、芯片内部受电磁感应影响越深)


五、闪灯实验

单片机驱动LED有两种不同的接线方式

点亮板载LED在PC13引脚,它默认为开漏接法;此外,我们还可以尝试点亮一个外部LED,用推挽接法

CubeMX生成代码

1.打开STM32CubeMX,新建工程,选择芯片

2.设置芯片的调试接口(如果忘记这个步骤,芯片的调试接口将被锁死,程序烧录不进去)

3.设置引脚模式

在右侧芯片图中点击PC13和PA9引脚,均设置为GPIO_Output"

4.设置引脚参数

5.项目管理与生成

给项目取名、设置位置、选择开发的工具链(MDK-ARM)

6.查看代码

生成的代码均在main.c文件里,且可以看到,CubeMX已将帮我们生成了代码的框架

7.分析代码

要实现灯的闪烁,我们的c代码逻辑是这样的:

用HAL库是这样实现的:

8.填写代码

我们需要在"USER CODE BEGIN"和"USER CODE END"间填写代码,

这两个注释之外的代码在下次用CubeMX自动生成程序时会被删除

这样,我们完成的代码就完成了:

9.编译和下载

按编译按钮:

完成显示:

按下载按钮:

完成显示:

按单片机的复位按钮:

用ST-link进行调试

除了向单片机下载程序外,还可以用ST-link对代码进行调试

1.关闭代码优化

魔法棒------C/C++------level0

2.开启调试功能

点击调试按钮

3.操作

按这个按钮让代码单步执行

这个按钮让代码全速执行


六、bootloader清除程序

当忘记设置调试接口/想清除程序时可以使用单片机的bootloader

1.硬件操作

上面跳帽接右边,下面跳帽接左边

将USB转TTL(Transistor-Transistor Logic)模块接入开发板

2.软件操作

运行CubeProgrammer

选择串口UART与串口号COM4

点击connect

连接成功后

点击左侧第二个界面、完全擦除芯片、断开连接,

拔下bootloader,

再用ST-link连接电脑与芯片,

可以看到,可以正常烧录程序了。


七、四种输入模式

8钟工作模式,四种输出已经学完,接下来学习除模拟模式的其他三种模式,这三种模式与红色标识部分有关:

放大来看:

当IO引脚处于输入模式时,它的目的就是测量外部输入信号的电压,其约等于一块电压表因此,它的内阻也应当无穷大:

输入浮空模式:无穷大的电阻相当于开路,若上下拉电阻均未闭合,相当于引脚完全悬空,此时它相当于一块天线,能接收到空气中的电磁波,将随机读取0和1:

输入上/下拉模式:当没有外部输入信号,上拉电阻接通,IO引脚上也会出现一个稳定高电压,由此可得:


八、按钮实验

接线图:

PC13的设置我们前面已经设置过,现在看一下PA9(输入GPIO_Input)的设置:

C代码逻辑:

学习一段新代码:

GPIO_PinState是个返回值

最终程序:

相关推荐
代码游侠2 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
xuxg20054 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT5 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen6 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠9 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_9 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技11 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计11 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
風清掦12 小时前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报12 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机