历史上的今天
今天是:2025年01月14日(星期二)
2021年01月14日 | 一起学习 LPC1200 之 GPIO
2021-01-14 来源:eefocus
LPC1200简介
LPC1200系列Cortex-M0微控制器可在高达45MHz的CPU频率下运行,包含高达128KB片内Flash存储器和8KB数据存储器。较小的512字节Flash擦除扇区带来了多种设计上的好处,如更精细的EEPROM仿真,支持从任意串行接口启动加载,减少了对RAM缓存容量的要求,从而为现场编程带来便利。
LPC1200系列Cortex-M0微控制器的外设组件包括一个10位ADC(8通道)、两个带有输出反馈的模拟比较器、两个UART接口、一个SSP/SPI接口、一个带有快速模式的I2C接口、一个看门狗定时器、一个DMA控制器、一个CRC计算及校验模块、四个通用定时器、一个32位RTC和多达55个通用I/O引脚。
首先我们来点LED,我用的板子上有3个LED灯,分别在P0.22,P0.23,P0.24上 以灌电流的方式驱动。打开LPC1200的E文手册,找到GPIO这一章节,看看寄存器如下图所示:

MASK是屏蔽寄存器,默认不屏蔽,因此不用管这个寄存器!
PIN是输入寄存器,今天我们做GPIO的LED实验,无需用到读数据,如果用到读数据则要用到该寄存器。
OUT是输出寄存器,赋值1相应的管脚输出高电平,0相应的管脚输出低电平。
SET ,CLR和NOT也是和OUT输出相关的寄存器,看看解释就知道什么意思。
DIR是方向寄存器。
IS和后面的寄存器是和GPIO中断相关的寄存器。
GPIO的LED实验主要用到 DIR设置方向,SET设置默认输出高电平,OUT改变输出状态。
因此我们设置P0.22可以如下写法:
LPC_GPIO0->DIR|=(1<<22);
设置输出成高电平可以如下写法:
LPC_GPIO0->SET|=(1<<22);
主意:SET那位置1则将相应的位输出为高,置0不会置高 也不会置低,CLR用法正好相反!
让LED闪烁我们可以让OUT取反,或者用SET先置高然后CLR置地!
我们这里使用简单的OUT取反
LPC_GPIO0->OUT=~LPC_GPIO0->OUT;
主意这里将整个口取反了。
如果单个口操作可以使用 上面的方法!
由于我的板上没有别的资源因此将整个口取反也无妨。
不要忘记了在时钟控制中使能GPIO0 的时钟:LPC_SYSCON->SYSAHBCLKCTRL |= (1UL<<31);
整个C代码如下:
/**************************************************
*-------- 一起学习 ARM Cortex-M0 LPC1200 -------- *
*工 程:LED闪烁实验*
*时 间:2011年4月9日*
*作 者:天下的人*
*支 持:贞明电子*
*备 注:http://shop58972409.taobao.com/*
***************************************************/
#include"LPC12xx.h"
#include"system_LPC12xx.h"
#include"core_cm0.h"
//#include"lpc12xx_sysctrl.h"
/******************* 变量定义 *******************/
/******************* 函数声明 *******************/
__inline void LED_init(); //init LED
/******************** 主函数 ********************/
int main()
{
uint32_t i=0;
SystemInit(); // 系统初始化
LPC_SYSCON->SYSAHBCLKCTRL |= (1UL<<31); //使能时钟
LED_init();
while(1)
{
LPC_GPIO0->OUT=~LPC_GPIO0->OUT;
for(i=0;i<1000000;i++); //软件延时 您可以使用定时器
}
}
/******************* 函数定义 *******************/
__inline void LED_init()
{
LPC_GPIO0->DIR|=(1<<22); //Set P0.22 OUT
LPC_GPIO0->DIR|=(1<<23); //Set P0.23 OUT
LPC_GPIO0->DIR|=(1<<24); //Set P0.24 OUT
LPC_GPIO0->SET|=(1<<22); //Set P0.22 High
LPC_GPIO0->SET|=(1<<23); //Set P0.23 High
LPC_GPIO0->SET|=(1<<24); //Set P0.24 High
}
到此为止 我们的GPIO实验就完成了,怎么样是不是很简单!!
下一篇:LPC存储器加速模块(MAM)
史海拾趣
|
IAR5.3(评估版)编译老是提示如下的错误,是怎么一回事啊 Error[Lp021]: the destination for compressed initializer batch \"P2 mid-1\" is placed at an address that is dependent on the size of the batch, which is not allowed when using packbits compression. Consider using \"initialize by c ...… 查看全部问答> |
|
我用的是2450,问一下LCD横屏转竖屏,驱动程序里除了在头文件处修改分辨率外,还要修改什么地方呢? 我只修改了头文件处定义的分辨率的情况下,屏幕变窄了(部分屏幕黑色没图象),竖直方向靠下的部分没被显示出来。 不知道在哪(几)个文件里的函 ...… 查看全部问答> |
|
下了个WINCE6.0用的GPS软件,为什么EXE文件运行的时候要让我显示打开方式呢? rt 我用的是OMAP3530开发板,内置GPS模块,WINCE6.0环境已经建立,网上下了个GPS软件,EXE格式的用U盘考进去板子里打不开,出现类似于WINDOWS下的让你选择打开方式的窗口,不是EXE是可执行文件吗?而且下的是WINCE6.0可用的版本,谢谢各位了!… 查看全部问答> |
|
attach->pdp activation->ATD*99***1, ATD*99***1这条AT命令是做什么用的? PDP激活不就可以传数据了吗?… 查看全部问答> |
|
用ActiveSync直接在开发板上调试程序(wince6.0系统)。调试一次正常,但是结束调试再继续调试时,就会出现错误,有时候是部署不成功,有时候是部署成功,程序不能运行,都是说wince的存储内存不足。但是在wince的控制面板看到,存储 ...… 查看全部问答> |
|
这两天,下了个ucos在STM32F103ZE-SK开发板上移植的官方例程(uCOSII-ST-STM32F103ZE-SK),这其中有两个文件夹,u ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:04 编辑 电压比较器LM393 用正负12V 供电, 其输出的高电平、和低电平分别为多少呀? 我测试的高为12V, 低为-0.8V, 不知对否? 希望大家能给出自己的测试结果。 &nb ...… 查看全部问答> |
|
操作简单 2100操作简单直观,开箱即可使用。前面板易于理解和操作。其KI-Tool和KI-Link软件允许用户通过GPIB(如果安装了)或USB快速控制仪器,记录测量,以及显示数据的时间序列图。其LabView®和IVI驱动则给高级客户开放 ...… 查看全部问答> |




