——Dec.12.2020
目录
本次实验采用正点原子STM32F407探索者开发版和STM32cubeIDE软件开发
- 键盘外设原理以及控制
- 利用STM32cubeIDE配置串口通信
一、外接4x4键盘的使用
(1)外接4x4键盘的基本结构
4x4矩阵键盘的原理图如上图所示,当按键按下时,对应的电路才是通路,我们可以根据这个特性进行设计。矩阵键盘一共有八个IO口,在接口端我们可以看到最右边的接口标记为1,这个接口为第一列,一次为第二列,第三列,第四列,然后是第一行……第四行。
(2)键盘扫描原理
我们在上面讲到了,我们要利用按键按下后才是通路的原理进行键盘的识别。然而细心的同学会发现,外接键盘内部没有相对电位差,所以如果我们将把个接口全部设置为输入Input
,单片机是无法识别到任何有用信息的。我们可以采用一个变通的方法,将其中的四个接口设置为输出Output
(选择行或者列),然后将另外四个接口设置为输入Input
。我们就可以通过四个输出口不同的组合的输出以及四位输入的情况判断哪一个按键按下。
这里我设置前四个为输出后四个为输入,以下是我的引脚设置:(PS:找了好久感觉这一组比较好用,如果有另外的引脚推荐也可以和我说哦~ 😃 )
引脚Pin | 接口模式Mode | IO模式 | 标签Label |
---|---|---|---|
G0 | GPIO_Output | NPND | key_row3 |
F14 | GPIO_Output | NPND | key_row2 |
F12 | GPIO_Output | NPND | key_row1 |
B2 | GPIO_Output | NPND | key_row0 |
B0 | GPIO_Input | Pull-up | key_col3 |
C4 | GPIO_Input | Pull-up | key_col2 |
A6 | GPIO_Input | Pull-up | key_col1 |
A4 | GPIO_Input | Pull-up | key_col0 |
[NPND: No pull-up and no pull-down]
现在我们进入代码部分~(here we go~⛵️)
键盘识别的思路大致分为两个环节:
- 对于键盘进行列扫描
- 列扫描的同时进行行扫描
首先,为了方便我们先设置一些宏定义,以及定一个数组变量存储四位输入引脚的状态:
1 | //*********************PIN_MANAGER_引脚管理************************************ |
然后我们完成整个扫描程序的一个子程序(列扫描):
1 | // 第一部分:列扫描 |
然后我们就可以编写完整的案件扫描函数了:
1 | /*** |
然后我们调用该函数KEY_SCAN(),通过返回值判断按键。
二、串口通信配置
(1)打开串口通信以及配置
采用STM32cubeIDE打开串口的流程是比较简单的:
-
首先我们打开
Connectivity->USART1
我们就可以看到相应的界面 -
选择模式(Mode):
Asynchronous
(异步) -
点击下方
Parameter Settings
我们可以看到相应的参数设置:从上到下分别是波特率(Baud Rate),字节长度(Word Length),奇偶校验(Parity),停止位(Stop Bits)
-
再点击
NVIC Settings
将串口的中断激活:然后我们简单设置一下时钟树就可以进行串口通信了!⭐️(PS:若不知道如何设置的同学可以参考前篇教程,时钟配置基本一致)
(2)与电脑通信(虚拟串口)
根据(2)中的串口配置,我们已经开启了单片机的串口通信功能,但是我们还不可以让单片机i和点按哦进行通信,这是因为目前许多电脑端没有相应的串口接口,但是我们可以采用USB的虚拟串口进行通信。(PS:这个也需要单片机板子有相应的信号转换芯片),下面介绍具体的打开方法:
- 点击
Connectivity -> USB_OTG_FS
将模式Mode设置为Device_Only
,并把下方中断使能打开 - 接着我们点击
Middleware -> USB_DEVICE -> Class For FS IP
设置为虚拟串口通信(Communication Device Class (Virtual Port Com))
然后点击Generate Code
就可以开始编写代码了!
(3)验证代码部分
验证思路:
- 正确配置好外接键盘以及串口通信
- 通过外接按键输入,单片机读取按键信息并将信息通过串口传输到电脑上
- 电脑打开串口助手接收到信息,对比按键验证是否配置正确。
[1] 函数介绍
在HAL函数库中,已经内置了有关串口传输和接受的相关函数。我们可以通过文件检索关键字UART
来查询。之类例举几个本次实验会用到的函数:
1 | //Function_1 传输函数 |
1 | //Function_2 接收函数 |
另外还有HAL_UART_Transmit_DMA, HAL_UART_Transmit_IT等等,其中关于DMA与存储有关,而IT与中断有关。目前还没具体用到这些函数,在这里也不方便介绍。(挖坑)
[2]验证代码
这里给了一个键盘验证的代码,由于函数十分简单,这里不做赘述。大家可以拷贝过去验证一下串口和外接键盘是否配置成功。
1 | //验证代码 |
点击编译
后无错误就可以点击Run
烧录到单片机上了,来看一下效果:
我么打开我们的串口助手(macOS的选手可以下一个“comtool”,windows的则很多选择)
看到窗口反馈出信息,成功!
END