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

观看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是个返回值

最终程序:
