×
单片机 > 单片机程序设计 > 详情

一起学习 LPC1200 之 GPIO

发布时间:2021-08-19 发布时间:
|

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日*

*作 者:天下的人*

*支 持:贞明电子*

*备 注:/zixunimg/eeworldimg/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实验就完成了,怎么样是不是很简单!!



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容