查阅 => 复制 => 粘贴 => 跑路!¶
好了,如果你已经看完了绝大部分视频然后决定继续跟进这部分的记录,那可以跳过本章去看后面的内容。本章重点讲述的是如何使用相关的手册和新建一个非常帅气的工程。
在看手册的时候,一定要将原理图跟参考手册(中文手册)结合起来使用。比方说我想点亮一颗 LED 灯,我得先把 LED 灯的对应接口给找出来。
可以看到,在 STM32F103C8T6 这块单片机中(不是什么很高大上的东西,就是野火的这块最小系统板而已),有 3 个 LED,分别是红色(RED)的LED1
,绿色(GREEN)的LED2
,蓝色(BLUE)的LED3
,对应的接口分别是(LED 正负极别都不会看了,如果真不会看的话 Deepseek 一下):LED1 负极接 PA1、LED2 负极接 PA2、LED3 负极接 PA3。
也就是说,我如果想点亮其中一颗 LED,就点亮 LED1 好了,我就必须得先找到 PA1 的接口位置(目前就叫接口叭,便于理解),然后让 PA1 输出一个点亮 LED 的命令。
(实际上在原理图中可以看出,在这块板子上,LED 的正极是始终接 3.3V 的正电压,而 PA1 接的是 LED 的负极,也就是说 LED 不发光的原因实际上是因为 LED 两端的电压并没有达到正向导通电压的最低要求(1.2~4V),所以 LED 不发光。如果说想让他发光,用数电的理解就是给一个低电平信号就可以了
所以接下来,我们就该去参考手册中找 PA1 的位置。那么,问题来了,怎么找?
在参考手册中,第二章存储器和总线架构中有一个系统结构图(总线这种概念如果说玩过 MC 的格雷科技 mod 就很好理解了,如果没玩过的话,不推荐去玩,纯纯赤石)。然后我们就要去找对应的 IO 口(PA1),往 PA1 中写对应的代码就可以了。
如果你眼睛亮一点,可以看到在 APB2 箭头指的方向的底下,有一个叫 GPIOA 的东西,说明 APB2 是控制这个玩意儿。而这个 GPIOA,就是我们要找的 PA1(PA 对应的就是 GPIOA,PB 就是 GPIOB,以此类推。很好理解叭 ~~)。由于 STM32 引脚数量有限,一个 IO 所对应的接口数并不为一。换而言之,一个 IO 口控制的接口可以有很多个。细心点的你会发现,所有的 LED 都是 PA 开头的,也就是说,仅这个 GPIOA 一个 IO 口就可以控制 3 个 LED 的亮灭状态。
那讲了这么多,IO 又是啥个东西?相信大家都选修了 C++ 这一门课。C 语言和 C++ 中都有一个叫做输入输出流的东西,像 C 语言中的常用输入函数是 scanf(),常用输出函数是 printf(),但是 C 语言的这两个函数使用起来有很多限制,比如说要 %d 之类的占位符来限定输入输出的类型。而在 C++ 中有一个标准输入输出流,就是常用的 cin 和 cout 。这个流最好不要单纯的直接记,而是分开来记,记成 c_in 和 c_out ,一个是输入 in,一个是输出 out。
而在 STM32 中,这个GPIO
指的就是通用功能输入输出端口(General Purpose Input Output)
,过英语四级的相信 input 和 output 是看得出来的(对的没错,上面七七八八讲了那么一段话其实就只是想让你们知道IO
这两个字母的意思)。简单点来说,这个东西就是用来控制单片机上的各种元器件。
至于我们要如何去建立一个非常帅气的工程文件,我在这份记录的开头也已经说了,这份学习笔记更侧重的是对标准库的使用,所以教你们建立非常帅气的工程文件是不可能的啦。但是我还是会给出我常用的一个 Template,也就是模板工程文件夹。以后写代码直接将这个 Template 文件夹拷贝到工程文件夹下就可以了,也可以复制粘贴之后重命名文件夹。随即也可以看一下我当时看野火教学视频时配置 Keil5 的一个笔记(相关的资料都在课外拓展学习那一块儿的学习资料分享中)。
考虑到有些朋友喜欢有 VScode 进行编译操作什么的,这里也给出 Keil5 如何在 VScode 上进行配置的 blog。
毕竟VScode的高亮看着让人还是很有写程序的欲望的。而且VScode也可以内置像copilot
这样的AI插件,可以自动补全代码。yes,这货很赞。(这两句话就是copilot
写的,这货还挺会自夸(哭笑不得))
配置好后大概长这样:
(页面长这样是因为我给 VScode 加了皮肤,喜欢我这样的自己去找咋整的,扩展名是Noctis
)
如果学到这里你觉得有点困难了,就可以考虑开始跑路了;如果你觉得还 OK 的话,那么在下一章中,我们就要开始跑路了——跑通我们的第一个代码。