树莓派3B+使用STM32扩展板实现按键驱动

前几天入了个树莓派3B+,之前用过树莓派zero  W觉得很方便,但是外围接口少了点。准备用3B+做个远程多路视频监控系统,现在还在熟悉树莓派的硬件和系统接口,后续会更新实现过程和原码。

树莓派里引出了40个pin,其中有8个引脚可以作为GPIO口使用。实验的主要功能就是验证树莓派中使用Python控制GPIO输入输出的功能。用户指南里用的是面包板插线的方法来进行实验的,我手上没有这些器件,但是有好几块单片机开发板,可以用这些单片机作为扩展板实现上面的实验。扩展板选的是个人比较喜欢的ST家的STM32L476VGT6G  Discovery开发板。

感谢Eben大牛做的贡献,让我们这些小白能以低廉的价格用到性能如此卓越的计算机。Eben大牛写的《Raspberry Pi用户指南》入门必备书籍,在这里分享给大家,还有一些树莓派书籍买板子送的:

《Raspberry用户指南》中文第3版:https://pan.baidu.com/s/19s9PDvrXWtu_eSl7GWPuRg       提取码:2gg2

                                       英文第4版:https://pan.baidu.com/s/1pP8PZPa2pPW9MuxcJOqGdQ    提取码:fa5v

其他书籍:链接:https://pan.baidu.com/s/1-27kV8ko4vH8FEd9vswpAg   提取码:66s7 

实现流程: STM32板上的按键JOY_DOWN被按下后翻转LED4的状态,同时把和LED4连接的PB2引脚用杜邦线和树莓派上的GPIO12连接。树莓派上检测到GPIO12的状态改变就会打印一段信息到屏幕上。功能很简单,但是在第一次实验时还是遇到一些问题。

树莓派的引脚图:

从上图看到按照引脚标号顺序看第12引脚对应GPIO18,第32引脚对应GPIO12。

先看用户指南里给的demo:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.IN)
while True:
	input_value = GPIO.input(12)
	if input_value == False:
		print("The button has been pressed.")
		while input_value == False:
			input_value = GPIO.input(12)

其中第2行定义的就是GPIO和引脚的对应关系,这里参考https://www.linuxhub.org/?p=629。所以BOARD模式使用的是物理引脚的定义,而BCM模式的引脚对应CPU上的GPIO。

下面再来看STM32板上的连线,板上的按键连接PA5引脚,而LED灯和PB2连接,这里把PB2和树莓派的第12 引脚相连。还要注意把STM32 板上的GND和树莓派的GND连接,使2者共地,否则会看不到结果。

树莓派和STM32的连线:

STM32实现的核心代码:

void Key_Scan(void)
{
  if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == GPIO_PIN_SET)
  {
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2);
    while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == GPIO_PIN_SET);
  }
}

功能很简单,就是按键按下后翻转LED状态。

树莓派上的代码是检测到GPIO12状态改变后打印提示:

#!/usr/bin/env python

import RPi.GPIO as GPIO

#忽略警告信息,没有这句每次重新运行会提示警告
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.IN)
flag = GPIO.input(12)

#GPIO12状态改变后打印提示
while True:
    input_value = GPIO.input(12)
    if input_value == (not flag):
        print("The button has been pressed.")
        flag = not flag

上面运行后,每当STM32上的按键按下,树莓派就会打印“The button has been pressed.”,同时STM32板上的LED4翻转。

实验用其他单片机开发板也能实现,只要更改单片机的引脚就行。

猜你喜欢

转载自blog.csdn.net/ccyxchen/article/details/88226568