完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前几天入了个树莓派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翻转。 实验用其他单片机开发板也能实现,只要更改单片机的引脚就行。 |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
1739 浏览 0 评论
3339 浏览 9 评论
3017 浏览 16 评论
3508 浏览 1 评论
9106 浏览 16 评论
1224浏览 3评论
633浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
621浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2363浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1928浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-14 16:30 , Processed in 1.146620 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号