gpio

工程实践_GPIO介绍

蹲街弑〆低调 提交于 2020-01-17 06:26:11
一.GPIO简介 GPIO(General-Purpose IO ports),也就是通用IO口。在嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对于这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭。对于这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制芯片上一般都会提供一个“通用可编程IO接口”,也就是GPIO。 GPIO接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对数据寄存器中每一位的作用,即每一位的信号流通方向是输入还是输出,则可以通过控制寄存器中对应位独立的加以设置。这样,有无GPIO接口也就成为微控制器区别于微处理器的一个特征。 在实际的MCU中,GPIO是有多种形式的。比如,有的数据寄存器可以按照位寻址,有些却不能按照位寻址,这在编程时就要区分了。比如传统的8051系列,就区分成可位寻址和不可位寻址两种寄存器。另外,为了使用的方便,很多MCU把glue logic等集成到芯片内部,增强了系统的稳定性能,比如GPIO接口除去两个标准寄存器必须具备外,还提供上拉寄存器,可以设置IO的输出模式是高阻,还是带上拉的电平输出,或者不带上拉的电平输出。这在电路设计中

Linux GPIO控制方法

倖福魔咒の 提交于 2020-01-16 21:02:22
转自 https://www.cnblogs.com/chenfulin5/p/6274076.html 在文件系统层: 1. 进入 /sys/class/gpio/ 目录 2. 假设你想控制的GPIO0_29,步骤如下: 1. echo 29 > export 2. 此时会产生一个gpio29 的目录. 3. cd gpio29 4. 关注以下几个文件: direction 这个文件是控制你是输出还是输入模式 如果想设置为输入:echo in > direction 如果想设置为输出:echo out > direction value 这个文件是在输出模式时,控制高低电平 高电平:echo 1 > value 低电平:echo 0 > value edge 这个控制中断触发模式 无: echo none > edge 上升沿触发:echo rising > edge 下降沿触发:echo falling > edge 轮询:echo both > edge active_low: 这个按照官方的说法是这个翻转电平,输入非零的数即上升沿变为下降沿。 o: echo 0 > active_low 非零的数: echo 3 > active_low 5.关闭这个GPIO控制。 cd /sys/class/gpio/ echo 29 > unexport <br> 参考:https:/

点亮板载LED

大兔子大兔子 提交于 2020-01-16 05:09:09
1.开发板说明    开发板型号:MaixPy-bit(mic)        图1-1 MaixPy-bit开发板   主要功能:机器视觉 2.板载LED操作 2.1硬件部分    板载LED原理图: 图2-1 板载LEDIO口分配  图2-2 板载LED原理图    板载LED是一个三色的复合灯(RGB),绿色连接的是IO_12、红色连接的是IO_13、蓝色连接的是IO_14。(源码中引脚对应的可能有误,解决办法是重新编译源码)   低电平点亮,所有被引出的IO口高电平时3.3V,而LCD屏幕IO引脚是1.8V(没有引出,直接是接LCD屏幕)。 2.2软件设计    在写程序前,我们需要知道, MaixPy 所使用的硬件 K210 的片上外设(比如GPIO、I2C等)对应的引脚是可以任意设置的,STM32 片上外设和引脚对应关系已经固定了, 只有部分引脚可以复用, 相比之下 K210 自由度更大。    片内指做成芯片的集成电路内部,简称片内;外设是外部设备的简称,是指集成电路芯片外部的设备。集成电路芯片与外部设备的连接一般需要专门的接口电路和总线的连接(包括控制总线路、地址总线和数据总线等)。   由于大规模集成电路的技术发展得很快,现在许多芯片在制造时已经能够将部分接口电路和总线集成到芯片内部。对于这部分电路与传统的接口电路和总线是有区别的,为了加于区别可以称之为片内外设

53树莓派操作引脚口

ε祈祈猫儿з 提交于 2020-01-15 22:35:47
https://www.jianshu.com/p/f31b90cc756f 1倒入引用  importRPi.GPIOasGPIO   2针脚编号 不同的命名规则 你可以使用下列代码(强制的)指定一种编号规则:   GPIO.setmode(GPIO.BOARD)   #or   GPIO.setmode(GPIO.BCM)   下面代码将返回被设置的编号规则   mode=GPIO.getmode()    3警告   如果RPi.GRIO检测到一个引脚已经被设置成了非默认值,那么你将看到一个警告信息。你可以通过下列代码禁用警告: GPIO.setwarnings(False) 引脚设置 在使用一个引脚前,你需要设置这些引脚作为输入还是输出。配置一个引脚的代码如下: #将引脚设置为输入模式 GPIO.setup(channel,GPIO.IN) #将引脚设置为输出模式 GPIO.setup(channel,GPIO.OUT) #为输出的引脚设置默认值 GPIO.setup(channel,GPIO.OUT,initial=GPIO.HIGH) 4释放 一般来说,程序到达最后都需要释放资源,这个好习惯可以避免偶然损坏树莓派。释放脚本中的使用的引脚: GPIO.cleanup() 注意,GPIO.cleanup()只会释放掉脚本中使用的GPIO引脚,并会清除设置的引脚编号规则。

How to properly initialize I2C stm32?

╄→гoц情女王★ 提交于 2020-01-14 15:49:10
问题 I want to get data from ADXL345 accelerometer,but seems that I incorrectly connect it. SCL- PC6(with 10k resistor) SDA- PC7(with 10k resistor) SDO- GND CS - VCC GND - GND 3.3v - VCC Here is my code to initalize: void I2CG_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; I2C_InitTypeDef I2C_InitStructure; RCC_AHBPeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // I2CG clock enable RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2CG, ENABLE); RCC

STM32串口usart

为君一笑 提交于 2020-01-14 04:26:10
STM32 串口 UART串口通信协议是嵌入式开发的常用通信协议(UART、I2C、SPI等)之一,全称叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)。 异步串行通讯 异步通信是指发送和接收端使用的是各自的时钟,并且它是一种不连续的传输通信方式,一次通信只能传输一个字符数据(字符帧)。 异步串行同信帧 :将一个字节数据加上起始位、校验位以及停止位构成字符帧。由于异步通信没有同步时钟,所以接收端要时刻处于接收状态。 起始位 :在没有数据传送时(空闲状态),此时通信线上为逻辑“1”。当发送端要发送一个数据时,首先发送一个逻辑“0”,这个低电平就是帧格式的起始位。作用是告诉接收端要开始发送一帧数据。接收端检测到这个低电平之后,就准备接收数据信号。 数据位 :在起始位之后,发送端发出的就是数据位,数据位的位数没有严格限制(5-8位都可以)。低位在前,高位在后。由低位向高位逐位发送。 校验位 :数据位发送完成之后,可以发送以为用来校验数据在传送过程中是否出错。校验位是收发双方预先约定好的有限制差错检验的方式之一(可不用)。 停止位 :字符帧格式的最后部分是停止位,逻辑“1”有效,它的占位有1/2位、1位或者2位。停止位表示传送一帧信息的结束,也作为发送下一帧数据信息做准备。 异步串行通信特点:不需要同步时钟,通信实现简单

SysFs interface. I can't export gpio pins in a Xilinx's Board (Zybo and other)

老子叫甜甜 提交于 2020-01-14 02:30:26
问题 Using a linux-kernel compiled as it is described here, I'm trying to make a led blinking following this wiki: Linux GPIO Driver. I'm working with a Zybo-board of Xilinx. I enabled the kernel options: CONFIG_GPIO_SYSFS=y CONFIG_SYSFS=y CONFIG_GPIO_XILINX=y I checked that I have mounted in /sys the SysFs I want to configure the pin 7 of the MIO port because it is attached to the led LD4 in the board. So I used this expression: echo 7 > /sys/class/gpio/export And I always obtain this error:

单片机零基础学习之从“点灯”入门STM32

痴心易碎 提交于 2020-01-14 00:05:24
本篇文章我们通过一个简单的例子来熟悉模块化编程以及利用库函数的方法进行开发使用STM32外设的基本流程。 首先,我们打开本讲的例程,在工程目录我们可以看到驱动分组下有 led、delay 两个.c源文件,其实,它们对应的还有两个头文件,它们就保存在我们的 DRIVER 文件夹下的 inc 文件夹中,同理,源文件就保存在 src 文件夹中。 我们在源文件里定义相关的函数,然后在对应的头文件里声明它,最后我们在想要调用此函数的源文件中包含该头文件即可,这就是模块化编程。这样做的好处就是代码整体框架结构清晰明了,便于我们进行后期维护与移植。 因此,这个知识点希望大家能够掌握。 下面我们就开始具体讲解如何驱动我们实验平台上的用户指示灯。首先,我们要明白,点灯它的本质是通过控制GPIO引脚这个基础外设输出高低电平,从而达到灯亮灭的效果,那么大家可能就要问了,之前说过,可以配置使用的通用 GPIO 引脚有37个,这么多GPIO口,我们该使用哪个呢? 通过观察下图,我们可以发现,用户灯的一端是与主控芯片的 PC13 这个引脚电气相连的,因此我们就是要配置这个管脚输出高低电平,那么究竟是那种电平会使灯变亮呢?这时就要看我们的驱动电路了,其实也很简单,用户灯其实就是个发光二极管 ,既然是二极管,那么它就具有单向导电性 ,它的正极 接了3.3V电压,我们需要点亮它就需要在负极输出低电平,也就是

“This GPIO pin already exists:” GPIO 1 Exception on Second Time

馋奶兔 提交于 2020-01-13 09:41:36
问题 I am working on Raspberry pi and java to make the LED to blink by using pi4j , everything is cleared and worked fine , the LED is blinking as per the code but when i run the second time it causes the following error, i have searche lot there is lot of same question without the clear answer how to solve it ,any help would be appreciated final GpioController gpio = GpioFactory.getInstance(); final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin( RaspiPin.GPIO_01, "PinLED", PinState

树莓派4 PWM控制风扇转速

怎甘沉沦 提交于 2020-01-13 03:17:40
5V风扇是笔记本拆下来的,接了个ss8550 NPN三极管。 接线: pi 5V --- 风扇5V 风扇GND --- 三接管C极 pi BCM 18 --- 三极管B极 pi GND --- 三极管E极 效果图: 代码: #!/usr/bin/python3 # encoding: utf-8 import RPi.GPIO import time RPi.GPIO.setwarnings(False) RPi.GPIO.setmode(RPi.GPIO.BCM) RPi.GPIO.setup(18, RPi.GPIO.OUT) pwm = RPi.GPIO.PWM(18, 75) duty = 0 lastDuty = 0 try: while True: tmpFile = open('/sys/class/thermal/thermal_zone0/temp') temp = int(tmpFile.read()) tmpFile.close() duty = 100; if temp >= 34500 : duty = 60 if lastDuty >= 36500 : duty = 50 if temp >= 38500: duty = 40 if temp >= 40500: duty = 30 if temp >= 42500: duty = 20 if temp