gpio

ARM之GPIO介绍(Exynos4412平台)

耗尽温柔 提交于 2020-01-29 03:36:09
GPIO 概述 :GPIO的英文全称是General-Purpose Input/Output,也就是通用输入输出。在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO.接口至少有两个寄存器,即“通用IO控制寄存器”和“通用IO数据寄存器”。 特性 46个可中断通用控制I/O; 172个外部中断; 32个外部可唤醒中断; 252个多路复用I/O口; 睡眠模式引脚状态可控(除了GPX0,GPX1,GPH2,GPH3); GPIO常用寄存器 引脚控制寄存器(GPxCON x=A0~V4) 在exynos4412中,大多数的引脚都是功能复用的,所以必须对每个引脚进行配置。引脚控制寄存器(GPxCON)用来配置每个引脚的功能。 引脚数据寄存器(GPxDAT x=A0~V4) 如果引脚功能被配置为输出功能,可以通过向GPxDAT寄存器对应位写入数据,控制引脚输出相应电平。如果引脚被配置为输入功能,则可以从GPxDAT寄存器对应位读出数据读回的数据就是当前引脚的电平状态。 引脚上拉下拉设置寄存器(GPxPUD x=A0~V4) exynos4412芯片的内部给引脚设置了上拉电路和下拉电路,通过引脚上下拉设置寄存器控制引脚上拉电阻和下拉电阻的使能和禁止。如果引脚的上拉电阻被使能,则无论在哪种状态(输入、输出、DATAn、EINTn等其他功能)下,上拉电阻都起作用。

DA14580之GPIO口的使用

大憨熊 提交于 2020-01-28 16:52:22
SDK版本:5.0.4 开发环境:Keil 芯片:DA14580 作者:Asam         DA14580的gpio使用十分简单,只需调用其SDK自带的库函数即可。       (1)IO口初始化函数 1 /** 2 **************************************************************************************** 3 * @brief Combined function to set the state and the type and mode of the GPIO pin 4 * 5 * @param[in] port GPIO port 6 * @param[in] pin GPIO pin 7 * @param[in] mode GPIO pin mode. INPUT = 0, INPUT_PULLUP = 0x100, INPUT_PULLDOWN = 0x200, OUTPUT = 0x300, 8 * @param[in] function GPIO pin usage. GPIO_FUNCTION enumaration. 9 * @param[in] high set to TRUE to set the pin into high else low 10 * 11 *

stm32之IIC通信协议

…衆ロ難τιáo~ 提交于 2020-01-28 03:57:12
1 //³õʼ»¯IIC 2 void IIC_Init(void) 3 { 4 GPIO_InitTypeDef GPIO_InitStructure; 5 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); //ʹÄÜGPIOBʱÖÓ 6 7 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; 8 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //ÍÆÍìÊä³ö 9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 10 GPIO_Init(GPIOB, &GPIO_InitStructure); 11 GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7); //PB6,PB7 Êä³ö¸ß 12 } 13 //²úÉúIICÆðʼÐźŠ14 void IIC_Start(void) 15 { 16 SDA_OUT(); //sdaÏßÊä³ö 17 IIC_SDA=1; 18 IIC_SCL=1; 19 delay_us(4); 20 IIC_SDA=0;//START:when CLK is high,DATA

STM32F1连接X9313调节电压

大城市里の小女人 提交于 2020-01-27 05:33:22
1、查看X9313手册 这就是个滑动变阻器的电动版。 每滑动一次就改变一次电压,往电压高或者低的方向滑动,最多只能滑动 1 - 31 次。 每滑动一次,Vw管脚的电压就增加或减少 0.106V。 手册说CS片选管脚为高电平,就啥也干不了。 当CS为低电平,UD为高电平,INC从高电平变为低电平一次,就向高电平方向滑动一次。 当CS为低电平,UD为低电平,INC从高电平变为低电平一次,就向低电平方向滑动一次。 当CS由低电平变为高电平,INC管脚为高电平,x9313保存当前滑动位置(此滑动位置就是下次滑动时候的初始位置)。 当CS由低电平变为高电平,INC管脚为低电平,x9313不保存当前滑动位置,返回到初始滑动位置。 2、查看电路连接 3、驱动代码 bzq . h # ifndef _BZQ_H # define _BZQ_H //#include "添加你自己的各种头文件.h" /***********************变阻器GPIO定义******************************************/ # define BZQ_CS_1M PBout(7) # define BZQ_UP_1M PBout(6) # define BZQ_INC_1M PBout(5) void Bzq_Up_I ( u8 arg ) ; void Bzq_Down_I

STM32笔记之 GPIO引脚

≡放荡痞女 提交于 2020-01-27 00:16:08
写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。 目录 一、GPIO模式 二、外设 I/O配置模式选择 三、GPIO配置代码实现 四、总工程实现 一、GPIO模式 STM32的 GPIO模式有以下几种: GPIO_Mode_AIN -- 模拟输入 GPIO_Mode_IN_FLOATING -- 输入浮空 GPIO_Mode_IPD -- 输入下拉 GPIO_Mode_IPU -- 输入上拉 GPIO_Mode_Out_OD -- 开漏输出 GPIO_Mode_Out_PP -- 推挽式输出 GPIO_Mode_AF_OD -- 开漏复用功能 GPIO_Mode_AF_PP -- 推挽式复用功能 typedef enum { GPIO_Mode_AIN = 0x0, GPIO_Mode_IN_FLOATING = 0x04, GPIO_Mode_IPD = 0x28, GPIO_Mode_IPU = 0x48, GPIO_Mode_Out_OD = 0x14, GPIO_Mode_Out_PP = 0x10, GPIO_Mode_AF_OD = 0x1C, GPIO_Mode_AF_PP = 0x18 }GPIOMode_TypeDef; 为了后面的代码参考,顺便在上面贴上

电机驱动模块--L298N

让人想犯罪 __ 提交于 2020-01-27 00:10:15
最近在用树莓派做点东西,用到了L298N模块,有一些坑记录下来 我用的差不多长这个样子 先简要介绍一下L298N模块 L298N模块是一个电机驱动模块,干啥用的呢,就是我们如果要让电机转动,我们知道,需要给电机加上合适的电压就可以了,但是如果我们驱动多个电机,或者要使用单片机或者树莓派等用程序去控制电机的话,不可能是我们用插拔电源来实现,我们理所应当的选择“开关”来实现,然后利用真值表约定高低电平,来告诉开关啥时候打开,啥时候关闭。用来做这件事情的中间件我们叫电机驱动模块,L298N是常用的一款 L2898N有4个用来接收高低电平的输入端,如下图 电源输入端 当然,光有信号的接收端可是不能正常工作的,L298N用两个电源输入端,如下图,理论上输入的是7-12v,我测试过,低于大于6v而小于7v,供应一路输入是没问题的,只是电机转的有点费劲。如果电压高于12v,这个按照淘宝店的说法是要接一个外界分压电路,我没试过。输入输出端的旁边那个是一个5v的输出端,使用这个输出端的时候需要将该接口上方那个跳线帽拔下来 然后是输出 我们有四个输入端分别是 in1,in2,in3,in4对应左右两个输出端,out1,out2,out3,out4,他们两两在一起。然后真值表就很简单了 一高一低,这样存在电势差,就会正常工作 转速 L298N的功能不只是控制啥时候启动,还可以控制转速,通过pwm的方法

GPIO的初始化和使用

不打扰是莪最后的温柔 提交于 2020-01-26 08:31:15
一、STM32总线构架图 二、GPIO初始化 使能对应的端口时钟 RCC_APB2PeriphClockCmd(GPIOC,ENABLE); 使用GPIO_InitTypeDef声明一个结构体并对成员进行配置 GPIO_InitTypeDef GPIO_initStructure; GPIO_initStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;//引脚配置 GPIO_initStructure.GPIO_Mode = GPIO_Mode_Out_PP;//输入或输出模式 GPIO_initStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出速率 3.调用GPIO_Init初始化GPIO GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); //第一个参数为端口,第二个为结构体地址 //例:GPIO_Init(GPIOC,&GPIO_initStructure); 三、GPIO的使用 1.方法一:使用GPIO_SetBits(置1)和GPIO_ResetBits(置0) 2.方法二:使用位带操作(方便简单) 添加一个头文件,命名任意,此处取system.h,内容如下 #ifndef _system_H

GPIO及基本打通原理

寵の児 提交于 2020-01-26 07:44:07
GPIO及基本打通原理 底层驱动 I/O接口 通用IO(GPIO) GPIO输入引脚连接方式 带上拉电阻的连接 带下拉电阻的连接 “悬空”连接 GPIO输出引脚 KL25芯片 KL25芯片(80引脚封装) GPIO模块 GPIO基本编程步骤与基本打通程序 编程实例 底层驱动 指如何通过程序直接干预硬件。 I/O接口 即输入/输出接口,是MCU与外界进行交互的重要桥梁,MCU与外界的数据交换都需要通过I/O接口实现。 实质是一种电子电路,由内部若干专用寄存器和逻辑控制电路构成。 通用IO(GPIO) 是I/O的基本形式。一般情况下,使用正逻辑,规定高电平状态对应数字信号"1",低电平状态对应数字信号“0”。 当引脚作为通用输入时,MCU可以通过端口寄存器获取引脚的状态,反之,当引脚作为输出时,MCU可以通过内部寄存器控制引脚的输出状态。 GPIO输入引脚连接方式 带上拉电阻的连接 通过一个电阻连接到电源(VCC),可以设置引脚初始电平为高电平。 带下拉电阻的连接 通过一个电阻连接到地(GND)上,可以设置引脚初始电平为低电平。 “悬空”连接 一般不使用。 GPIO输出引脚 通过MCU内部程序控制引脚输出为高电平或低电平。 输出引脚O1和O2采样不同方式驱动外部器件,不同驱动电路,电流要求不同,采样不同接法。 图中当O1引脚输出为低电平时,LED点亮。 当O2引脚输出为高电平时

基于USB麦克风的娱乐功能

穿精又带淫゛_ 提交于 2020-01-26 03:50:30
基于4麦克风阵列(ReSpeaker 4-Mic Array)的娱乐功能包括 点歌,讲故事,相声,评书,天气预报和股市行情等 是淘宝上买的 套件,人家已经完全布好 并给了镜像文件,直接烧录到SD卡即可树莓派3B+上使用。上面附有说明书,运行程序前需要先进入虚拟环境,否则无法正常运行。 使用前,先授权,有效期只有一个月,运行 dueros-auth 获取百度的授权。 授权的文件保存在/home/pi/.avs.json。 但是麦克风阵列(ReSpeaker 4-Mic Array)影响我使用树莓派的其它引脚,所以打算改成基于USB麦克风的,亚马逊官网查了一下,人家本来就是针对USB麦克风的,我这行为类似于历史倒退,但适合我的需求,我喜欢,那就折腾吧! 首先 ,汉语搜不到任何资料,自己将文件夹内的.py文件 翻了个遍,也没有改成,老是提示 arecord录音错误,找不到录音设备(虽然安了pyaudio,看来没有使用,倍感清醒),感觉不是我理解的问题,应该解决硬件问题,单句执行 arecord -d 3 -c 2 -r 44100 -f S16_LE xiaoben.wmv 发现果真不能用(见我的“树莓派(USB麦克风和麦克风阵列) 录音和播放”https://blog.csdn.net/weixin_44345862/article/details/101355529)

C语言笔记:运算符与运算符

蓝咒 提交于 2020-01-26 00:09:28
1、#运算符 我们平时使用带参宏时,字符串中的宏参数是没有被替换的。例如: 输出结果为: 然而,我们期望输出的结果是: 5 + 20 = 25 13 + 14 = 27 这该怎么做呢?其实,C语言允许在字符串中包含宏参数。在类函数宏(带参宏)中, #号 作为一个 预处理运算符 ,可以 把记号转换成字符串 。例如,如果A是一个宏形参,那么#A就是转换为字符串”A”的形参名。这个过程称为 字符串化(stringizing) 。以下程序演示这个过程: 输出结果为: 这就达到我们想要的结果了。所以, #运算符 可以完成 字符串化(stringizing) 的过程。 2、##运算符 与#运算符类似, ##运算符 可用于类函数宏(带参宏)的替换部分。 ##运算符 可以把两个记号组合成一个记号。例如,可以这样做: #define XNAME(n) x##n 然后,宏XNAME(4)将展开x4。以下程序演示##运算符的用法: 输出结果为: 注意: PRINT_XN() 宏用 #运算符 组合字符串, ##运算符 把记号组合为一个新的标识符。 其实, ##运算符 在这里看来并没有起到多大的便利,反而会让我们感觉到不习惯。但是,使用 ##运算符 有时候是可以提高封装性及程序的可读性的。如跑实时操作系统的stm32程序中,关于gpio的硬件驱动中有如下代码: #define __STM32_PIN