从今天起,我将陆续发布LPC1200学习笔记!请大家多多关注贞明电子的开发板哟!!!
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实验就完成了,怎么样是不是很简单!!
欢迎讨论!!