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

最终程序:

相关推荐
LCMICRO-1331084774622 分钟前
长芯微LD9689完全P2P替代AD9689,是一款双通道、14位、2.0 GSPS/2.6 GSPS模数转换器(ADC)
网络·单片机·嵌入式硬件·网络协议·fpga开发·硬件工程·高速adc
逐步前行8 小时前
STM32_TIM_寄存器操作
stm32·单片机·嵌入式硬件
0南城逆流09 小时前
【STM32】知识点介绍七:PWM功能
stm32·单片机·嵌入式硬件
智者知已应修善业9 小时前
【51单片机独立按键控制数码管移动反向,2片74CH573/74CH273段和位,按键按下保持原状态】2023-3-25
经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
dashizhi20159 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑
我是一棵无人问荆的小草9 小时前
单片机通电后延迟启动策略
单片机·嵌入式硬件
坏柠10 小时前
ESP32-S3 蓝牙 BLE 从零到一:广播、服务、特征,用一个智能灯的例子全讲透
嵌入式硬件
日更嵌入式的打工仔10 小时前
UART RX为什么要上拉
单片机
三佛科技-1873661339713 小时前
FT32F030F6AP7高性能32位RISC内核MCU解析(兼容STM32F030K6TP7)
stm32·单片机·嵌入式硬件
LCMICRO-1331084774614 小时前
长芯微LDC90810完全P2P替代ADC128D818,是一款八通道系统监控器,专为监控复杂系统状态而设计。
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·模数转换芯片adc