LPC1768基本输入输出GPIO使用

发布者:平和宽容最新更新时间:2017-01-12 来源: eefocus关键字:LPC1768  输入输出  GPIO使用 手机看文章 扫描二维码
随时随地手机看文章

  LPC1788通用IO口的控制包含了一些基本的组件,比如设置推挽输出,开漏输出,上拉电阻等,我们今天来看看.

  首先使用GPIO要打开GPIO的系统时钟

   

  LPC_SC->PCONP |= (1<<15);//gpio 时钟

 

  然后需要选择我们选定引脚的功能,有些引脚有多个功能,通过寄存器可以从中选择一个

   

  之后是设置相关引脚的外部电阻状态pinmode寄存器

   

  然后设置开漏方式pinmode_od

   

  到这里,引脚的基本功能就OK了,此时要操作GPIO还需要设置几个东西

  1. 输入输出方向FIODIR

 

  1. 方向设置之后就可以输入输出了,注意gpio的输入输出是通过三个寄存器完成,输出设置寄存器功能是将io口电平设置为高

 

  输出为低电平用输出清除寄存器

   

  获取输出状态使用端口值寄存器

   

  另外,当我们想要禁用某些端口的时候可以使用屏蔽寄存器

  

  我们可以看到,寄存器的访问都是三十二位的不是很方便,幸好lpc1768是支持位段操作的,我们可以将寄存器的位段定义成这个样子

 

//位带操作,实现51类似的GPIO控制功能

//具体实现思想,参考<>第五章(87页~92页).

//IO口操作宏定义

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))

#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))

#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))

 

//IO口地址映射

//输出寄存器

#define GPIO0_ODR_Addr    (LPC_GPIO0_BASE+0x18) //0x2009C018

#define GPIO1_ODR_Addr    (LPC_GPIO1_BASE+0x18) //0x2009C038

#define GPIO2_ODR_Addr    (LPC_GPIO2_BASE+0x18) //0x2009C058

#define GPIO3_ODR_Addr    (LPC_GPIO3_BASE+0x18) //0x2009C078

#define GPIO4_ODR_Addr    (LPC_GPIO4_BASE+0x18) //0x2009C098

  

//输入寄存器

#define GPIO0_IDR_Addr    (LPC_GPIO0_BASE+0x14) //0x2009C014

#define GPIO1_IDR_Addr    (LPC_GPIO1_BASE+0x14) //0x2009C034

#define GPIO2_IDR_Addr    (LPC_GPIO2_BASE+0x14) //0x2009C054

#define GPIO3_IDR_Addr    (LPC_GPIO3_BASE+0x14) //0x2009C074

#define GPIO4_IDR_Addr    (LPC_GPIO4_BASE+0x14) //0x2009C094

 

//方向寄存器

#define GPIO0_DIR_Addr    (LPC_GPIO0_BASE+0x00) //0x2009C000

#define GPIO1_DIR_Addr    (LPC_GPIO1_BASE+0x00) //0x2009C020

#define GPIO2_DIR_Addr    (LPC_GPIO2_BASE+0x00) //0x2009C040

#define GPIO3_DIR_Addr    (LPC_GPIO3_BASE+0x00) //0x2009C060

#define GPIO4_DIR_Addr    (LPC_GPIO4_BASE+0x00) //0x2009C080

 

//清零寄存器

#define GPIO0_CLS_Addr    (LPC_GPIO0_BASE+0x1C) //0x2009C01C

#define GPIO1_CLS_Addr    (LPC_GPIO1_BASE+0x1C) //0x2009C03C

#define GPIO2_CLS_Addr    (LPC_GPIO2_BASE+0x1C) //0x2009C05C

#define GPIO3_CLS_Addr    (LPC_GPIO3_BASE+0x1C) //0x2009C07C

#define GPIO4_CLS_Addr    (LPC_GPIO4_BASE+0x1C) //0x2009C09C

 

//IO口操作,只对单一的IO口!

//确保n的值小于32!

#define P0high(n)  BIT_ADDR(GPIO0_ODR_Addr,n)  //输出  0输出不变 1输出为1

#define P0low(n)   BIT_ADDR(GPIO0_CLS_Addr,n)  // 清除   0输出不变 1输出0

#define P0in(n)    BIT_ADDR(GPIO0_IDR_Addr,n)  //输入

#define P0dir(n)   BIT_ADDR(GPIO0_DIR_Addr,n)  //方向 0输入1输出

     

 

#define P1high(n)  BIT_ADDR(GPIO1_ODR_Addr,n)  //输出  0输出不变 1输出为1

#define P1low(n)   BIT_ADDR(GPIO1_CLS_Addr,n)  // 清除   0输出不变 1输出0

#define P1in(n)    BIT_ADDR(GPIO1_IDR_Addr,n)  //输入

#define P1dir(n)   BIT_ADDR(GPIO1_DIR_Addr,n)  //方向 0输入1输出

 

#define P2high(n)  BIT_ADDR(GPIO2_ODR_Addr,n)  //输出  0输出不变 1输出为1

#define P2low(n)   BIT_ADDR(GPIO2_CLS_Addr,n)  // 清除   0输出不变 1输出0

#define P2in(n)    BIT_ADDR(GPIO2_IDR_Addr,n)  //输入

#define P2dir(n)   BIT_ADDR(GPIO2_DIR_Addr,n)  //方向 0输入1输出

 

#define P3high(n)  BIT_ADDR(GPIO3_ODR_Addr,n)  //输出  0输出不变 1输出为1

#define P3low(n)   BIT_ADDR(GPIO3_CLS_Addr,n)  // 清除   0输出不变 1输出0

#define P3in(n)    BIT_ADDR(GPIO3_IDR_Addr,n)  //输入

#define P3dir(n)   BIT_ADDR(GPIO3_DIR_Addr,n)  //方向 0输入1输出

 

#define P4high(n)  BIT_ADDR(GPIO4_ODR_Addr,n)  //输出  0输出不变 1输出为1

#define P4low(n)   BIT_ADDR(GPIO4_CLS_Addr,n)  // 清除   0输出不变 1输出0

#define P4in(n)    BIT_ADDR(GPIO4_IDR_Addr,n)  //输入

#define P4dir(n)   BIT_ADDR(GPIO4_DIR_Addr,n)  //方向 0输

这样就可以很方便的控制IO口的输入输出方向和设置值以及获取值了(否则在某些io口模仿iic的应用中烦得要死啊).

给一个相关的代码

//led为p2.0

 

void LedInit(void)

{

    LPC_SC->PCONP |= (1<<15);//打开GPIO时钟

    LPC_PINCON->PINSEL4 &= ~(0X03L<<0);//gpio功能

    LPC_PINCON->PINMODE4 &= ~(0X03L<<0);//上拉电阻

    LPC_PINCON->PINMODE_OD2 &= ~(0X01<<0);//推挽模式

    P2dir(0) = 1;//输出

    P2high(0) = 1;//初始化高电平,灯灭

}

 

void LedSet(u8 set)

{

    if(set)P2high(0) = 1;

    else P2low(0) = 1;

}


关键字:LPC1768  输入输出  GPIO使用 引用地址:LPC1768基本输入输出GPIO使用

上一篇:lpc1768ADC使用
下一篇:LPC1768IAP(详解,有上位机)

推荐阅读最新更新时间:2024-03-16 15:30

NEC V850 之 通用输入输出I/O口
编译环境:IAR For V850 3.81 + MiniCube2 硬件平台:NEC V850ES/FG3 D70F3630 (D70F3377A) 硬件资源: LED端口:P94 P10 KEY端口:P04 在使用V850的管脚做为输入输出I/O口的时候有下面几个步骤: 第一步:设置端口模式寄存器(PMCn); 第二步:设置端口方向寄存器(PMn); 第三步:对端口寄存器赋值或者对端口寄存器查询获得输入值(Pn)。 下面是代码: 来自 GPIO.c void GPIO_PortInit(void) { PMC9L_bit.no4 = 0 ; // 设置端口为输入输出口模式 PM9L_bit.n
[单片机]
NEC V850 之 通用<font color='red'>输入输出</font>I/O口
PLC故障排除流程图分享 电源故障检查 运行故障检查 输入输出故障检查
1总体检查 根据总体检查流程图找出故障点的大方向,逐渐细化,以找出具体故障,如下图所示。 2 电源 故障检查 电源灯不亮需对供电系统进行检查,检查流程图如下图所示。 3运行故障检查 电源正常,运行指示灯不亮,说明系统已因某种异常而终止了正常运行,检查流程图如下图所示。 4输入输出故障检查 输入输出是 PLC 与外部设备进行信息交流的通道,其是否正常工作,除了和输入输出单元有关外,还与联接配线、接线端子、保险管等元件状态有关。检查流程图如下图所示。
[嵌入式]
PLC故障排除流程图分享 电源故障检查 运行故障检查 <font color='red'>输入输出</font>故障检查
升压变换器,升压变换器输入输出电压关系及Boost电路拓补结
Boost电路:升压斩波器,入出极性相同。 利用同样的方法,根据稳态时电感L的充放电伏秒积相等的原理,可以推导出电压关系: Uo/Ui=1/(1-Δ) 图2-3:Boost电路拓补结构 这个电路的开关管和负载构成并联。在S通时,电流通过L平波, 电源对L充电。当S断时,L向负载及电源放电,输出电压将是输入电压Ui+UL,因而有升压作用。
[模拟电子]
升压变换器,升压变换器<font color='red'>输入输出</font>电压关系及Boost电路拓补结
STM8 通用输入输出口--GPIO
简介 通用输入/ 输出口用于芯片和外部进行数据传输。一个IO端口可以包括多达8 个引脚,每个引脚可以被独立编程作为数字输入或者数字输出口。另外部分口还可能会有如模拟输入,外部中断,片上外设的输入/ 输出等复用功能。但是在同一时刻仅有一个复用功能可以映射到引脚上。复用功能的映射是通过选项字节控制的。请参考数据手册关于选项字节的描述。 每个端口都分配有一个输出数据寄存器,一个输入引脚寄存器,一个数据方向寄存器,一个选择寄存器,和一个配置寄存器。一个I/O 口工作在输入还是输出是取决于该口的数据方向寄存器的状态。 GPIO主要功能 ● 端口的各个位可以被单独配置 ● 可选择的输入模式:浮动输入和带上拉输入 ● 可选择的输出模式
[单片机]
STM8 通用<font color='red'>输入输出</font>口--<font color='red'>GPIO</font>
STM32的GPIO 输出—使用固件库点亮LED
硬件设计 在本教程中STM32 芯片与LED 灯的连接见图1,这是一个RGB 灯,里面由红蓝绿三个小灯构成, 使用PWM控制时可以混合成256 不同的颜色。 图1 LED 硬件原理图 这些LED 灯的阴极都是连接到STM32 的GPIO引脚,只要我们控制GPIO引脚的电平输出状态,即可控制LED 灯的亮灭。若您使用的实验板LED 灯的连接方式或引脚不一样,只需根据我们的工程修改引脚即可,程序的控制原理相同。 软件设计 为了使工程更加有条理,我们把LED 灯控制相关的代码独立分开存储,方便以后移植。在“工程模板”之上新建“bsp_led.c”及“ bsp_led.h”文件,其中的“bsp”即BoardSupport
[单片机]
STM32的<font color='red'>GPIO</font> 输出—<font color='red'>使用</font>固件库点亮LED
MSP430第十二章:通用输入输出接口GPIO
1. 数字I/O接口介绍 MSP拥有多达12组I/O接口(P1 - P11和PJ),其中P1 、P2具有可单独配置的中断功能,不同的设备可能还有其他中断接口。 P1口被储存在中断向量P1IV,P2口被储存在终中断量P2IV, I/O端口可被以byte(8位)或者word(16位)方式读写;P1和P2组成PA;P3和P4组成PB;以此类推;但中断P1IV P2IV只能byte读写,不存在PAIV 2. 数字I/O操作 2.1 输入寄存器PxIN BIT = 1 输入为高 BIT = 0 输入为低 PxIN为只读寄存器,当尝试对这些寄存器进行写操作时,会消耗大量电流 2.2 输出寄存器PxOUT BIT = 0 输
[单片机]
MSP430第十二章:通用<font color='red'>输入输出</font>接口<font color='red'>GPIO</font>
LPC1768GPIO输入和输出配置基础例程
**************************************** Copyright (c) CaKen ************************************ ******************************************************* **文件名 : main.c **作者 : CaKen **版本号 : V1.0 **时间 : 2014.08.13 **功能描述 : GPIO实验测试 ************************************************************* *******
[单片机]
LPC1768时钟详解
LPC1768有三个独立的时钟源,可以通过软件进行配置。MCU上电并成功复位后,内部的RC振荡器开始起振,并以此为工作频率去读取内部ROM区的代码来执行初始化工作,其中就包括对系统时钟的配置(在文件system_LPC17xx.c中)。 系统时钟配置的过程如下: LPC1700系列Cortex-M3微控制器包括3个独立的振荡器,它们分别为主振荡器(通常指外界晶振)、内部RC振荡器和RTC振荡器。每个振荡器可根据特定的应用要求来选用(通过配置时钟源选择寄存器CLKSRCSEL),寄存器配置如下
[单片机]
<font color='red'>LPC1768</font>时钟详解
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved