【铁头山羊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是个返回值

最终程序:

相关推荐
boneStudent7 小时前
STM32L476 LoRaWAN网关项目分享
服务器·网络·stm32
风痕天际7 小时前
ESP32-S3开发教程三:蜂鸣器与FreeRTOS多任务协同
单片机·嵌入式·freertos·esp32s3
ShiMetaPi7 小时前
GM-3568JHF丨ARM+FPGA异构开发板应用开发教程:01 UART读写案例
arm开发·单片机·嵌入式硬件·fpga开发·fpga·rk3568
松涛和鸣8 小时前
55、ARM与IMX6ULL入门
c语言·arm开发·数据库·单片机·sqlite·html
代码游侠8 小时前
学习笔笔记——ARM 嵌入式系统与内核架构
arm开发·笔记·嵌入式硬件·学习·架构
国科安芯8 小时前
AS32X601的I2C模块操作EEPROM详解
stm32·单片机·嵌入式硬件·架构·安全威胁分析·安全性测试
xu_wenming9 小时前
沁恒MCU 和乐鑫ESP32MCU选型对比
单片机·嵌入式硬件
QK_009 小时前
STM32--IIC
stm32·单片机·嵌入式硬件
蓁蓁啊9 小时前
解决 GCC 工具链自动链接 libg.a 导致的链接失败问题
linux·服务器·前端·arm开发·嵌入式硬件