gpio

Programming GPIO pins on a FINTEK F81866A chipset

随声附和 提交于 2020-05-15 11:35:27
问题 I have a Cincoze DE-1000 industrial PC, that features a Fintek F81866A chipset. I have to manage the DIO pins to read the input from a phisical button and to set on/off a LED. I have experience in C++ programming, but not at low/hardware level. On the documentation accompanying the PC, there is the following C code: #define AddrPort 0x4E #define DataPort 0x4F //<Enter the Extended Function Mode> WriteByte(AddrPort, 0x87) WriteByte(AddrPort, 0x87) //Must write twice to entering Extended mode /

Programming GPIO pins on a FINTEK F81866A chipset

自古美人都是妖i 提交于 2020-05-15 11:35:11
问题 I have a Cincoze DE-1000 industrial PC, that features a Fintek F81866A chipset. I have to manage the DIO pins to read the input from a phisical button and to set on/off a LED. I have experience in C++ programming, but not at low/hardware level. On the documentation accompanying the PC, there is the following C code: #define AddrPort 0x4E #define DataPort 0x4F //<Enter the Extended Function Mode> WriteByte(AddrPort, 0x87) WriteByte(AddrPort, 0x87) //Must write twice to entering Extended mode /

How to disable Raspberry Pi GPIO event for certain time period after it runs in Python?

吃可爱长大的小学妹 提交于 2020-05-15 08:39:12
问题 I am creating an event whenever my Raspberry Pi's GPIO pin has a falling edge. However, I want to disable this event for a certain amount of time (5 seconds for example) after each time it runs. I want the event to be enabled again after that time period. My first thought was just to use sleep(5) within the actual event function. But I believe this will not work due to the event being ran in a separate thread. Can anyone point me in the right direction to what I am trying to accomplish? This

在Cubieboard上通过GPIO成功点亮第一个LED【My first step on G...

一世执手 提交于 2020-04-10 22:26:17
如果你不知道什么是Cubieboard,点这里。 GPIO是干嘛的?你能看到的就是那96个pin针脚,可以用来:外接其他外设或传感器,比如LED灯,步进电机,继电器,温度传感器,红外传感器,超声波传感器等。 理论上,51开发板上的针脚能实现的,cubieboard都能实现。 我折腾了很多天、很多个内核之后,终于迈出了第一步,成功点亮了一个LED灯。 正面 看看引脚 控制输出电平 简单的说一下步骤: 首先要编译与你内核版本对应的sun4i-gpio.ko驱动(我同时也编译了uImage),我的内核版本是3.0.57+ 将编译好的驱动放到SD卡上rootfs分区的/lib/modules/3.0.57+(换为你的内核版本)/kernel/drivers/misc/sun4i-gpio.ko 然后修改script.bin,转为script.fex,添加gpio_para配置段,然后转回script.bin,放到SD卡第一个分区,覆盖script.bin(我同时也将uImage给替换了,应该不改uImage也可以) gpio_para配置如下(只是测试,没把所有的针脚都加进来): [gpio_para] gpio_used = 1 gpio_num = 4 gpio_pin_1 = port:PG00<1><default><default><default> gpio_pin_2 =

Cubieboard官方 GPIO驱动使用总结

三世轮回 提交于 2020-04-10 22:21:48
最近参考了tll同学的GPIO操作教程,终于完成了CB的GPIO控制操作。 板子使用的操作系统是官方标准系统 1.1版本的linaro官方img的,本身已经带 gpio 驱动文件。 1.官方驱动为gpio-sunxi.ko,位于 /lib/modules/3.0.62/kernel/drivers/ gpio /gpio-sunxi.ko。 2.因为系统启动后并没有加载该驱动模块,需要用户自行插入,使用insmod命令即可。之后lsmod可以看到gpio-sunxi. 当然也可以编辑 /etc/modules,在其中加入gpio-sunxi.ko。重启后lsmod检查是否已经加载。 3.驱动加载完毕后就可以操作GPIO口了。 对于GPIO口的操作,需要有以下三个步骤: 1).需要指明需要操作的端口号。 echo 4 > /sys/class/gpio/export ls /sys/class/gpio 会出现我们需要的端口文件夹 gpio4-pe4, 如果 echo 1 > /sys/class/gpio/export 似乎出现 gpio1-pe1。 2)打开gpio4-pe4,或者 ls gpio4-pe4,可以看到gpio4-pe4里面的文件,有2个文件与我们操作有关: 分别是 direction 和 value ,可以看出分别代表端口的方向 和端口的值。

stm32:简单按键输入实现

时间秒杀一切 提交于 2020-04-08 14:07:51
开发环境keil4,芯片STM32F103C8T6 1、main.c //串口实验 #include "sys.h" #include "delay.h" #include "key.h" #define DC12VDO_ON() GPIO_SetBits (GPIOC, GPIO_Pin_13) #define DC12VDO_OFF() GPIO_ResetBits (GPIOC, GPIO_Pin_13) int Index1,Index2,Index3 = 0; int time1; unsigned char gUart_Rece_Buf1[256]; unsigned char gUart_Rece_Buf2[256]; unsigned char gUart_Rece_Buf3[2048]; int i,j=0; u8 key; int main(void) { delay_init(); //延时函数初始化 sys_Init(); //系统初始化(时钟初始化、中断初始化、GPIOx初始化、串口1初始化、串口2初始化、串口3初始化) while(1) { DC12VDO_OFF();//led常亮 key=KEY_Scan(); if(key==1) { DC12VDO_ON();//灭led delay_ms(1000);//等待 } } } 2、key.c

stm32GPIO的8种工作模式

拥有回忆 提交于 2020-04-07 05:15:26
推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。 二、开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。开漏形式的电路有以下几个特点: 1、利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经上拉电阻、MOSFET到GND。IC内部仅需很小的栅极驱动电流。 2、一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。(上拉电阻的阻值决定了逻辑电平转换的速度。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。) 3、开漏输出提供了灵活的输出方式

基于stm32的HC-SR04超声波测距模块使用

北城以北 提交于 2020-04-06 19:09:17
1 工作原理 使用超声波模块之前,先了解其IO口和工作原理: 1.1 IO说明 VCC: 供5V电源 GND: 为地线 TRIG: 触发控制信号输入 ECHO: 回响信号输出 1.2 基本工作原理: 认真看好以下工作原理,后面的代码就是基于工作原理来实现的。 (1)采用IO口TRIG触发测距,给最少10us的高电平信号。 (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回, 通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。 测试距离=(高电平时间*声速(340M/S))/2 时序图: 2 程序编写 2.1 外设配置 根据两个信号引脚来配置两个单片机的IO口 trig: 需要产生一个10us高电平, 配置为推挽输出; echo: 等待高电平脉冲并测量其脉冲宽度, 配置为下拉输入 测量echo的高电平持续的时间,需要用到定时器, 因此配置一个定时器,用来计时 void UltrasonicWave_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//开启GPIOB时钟 RCC

小白也能玩转 i.MX6 平台的 GPIO 应用笔记

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-03 00:59:34
▋引言 :本文主要以FETMX6x-C平台,Linux3.0.35内核为基础,其他平台也可以参考,不同平台之间会存在差异,需自行修改适应自己的使用。 GPIO的通用操作 1.1 普通GPIO的使用 在嵌入式系统中对GPIO的操作是最基本的操作。在Linux中有一个通用的GPIO操作接口。在开发板文件系统中会有一个控制GPIO的目录:/sys/class/gpio;linux-3.0.35内核中Documention文件夹下边有gpio.txt文档可以参考。 root@freescale/sys/class/gpio$ ls export gpiochip0 gpiochip160 gpiochip32 gpiochip96 gpiochip128 gpiochip192 gpiochip64 unexport 名称 描述 export 导出GPIO操作接口 unexport 撤销GPIO操作接口的导出 gpiochip0 GPIO1组 gpiochip32 GPIO2组 gpiochip64 GPIO3组 gpiochip96 GPIO4组 gpiochip128 GPIO5组 gpiochip160 GPIO6组 gpiochip192 GPIO7组 其中,export和unexport为GPIO子系统的属性文件,其余七个文件则为符号链接(gpiochip0,gpiochip32

STM32(2)——GPIO

♀尐吖头ヾ 提交于 2020-03-30 01:56:24
对于初学者而言,最简单的是对芯片上的IO进行操作,我们学习ARM时候,第一个工程就是点亮LED,STM32F103ZET6通用输入输出接口 (General-Purpose Inputs/Outputs),每个GPIO都可以由软件配置成输出(推免或开漏)、输入(带或不带上拉或下拉)或复用的外设功能端口。多数 GPIO引脚都与数字或模拟的复用外设共用。具体的细节请参考 Datasheet。 回到 MDK开发平台,现在要在 main.c中加入相关代码了。代码清单如下: #include "stm32f10x_lib.h" int main() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB, ENABLE); //开启外设时钟 GPIOD->CRL = 0x33333333; //设置端口配置寄存器 GPIOB->CRL = 0x33333333; while(1) { GPIOD->ODR = 0xffffffbf; //设置端口输出寄存器 for(i=0;i<1000000;i++); //延时 GPIOD->ODR = 0xffffffff7; for(i=0;i<1000000;i++); GPIOD->ODR = 0x00000000; GPIOB->ODR = 0xffffffff;