LPC1700系列编程基础

1. 开发环境搭建
在开始LPC1700系列的编程之前,首先需要搭建一个合适的开发环境。LPC1700系列基于ARM Cortex-M3内核,常见的开发环境包括Keil uVision和LPCXpresso。本节将详细介绍如何搭建这些开发环境。
1.1 Keil uVision开发环境搭建
Keil uVision是一款广泛使用的集成开发环境(IDE),支持多种ARM内核的单片机开发。以下是搭建Keil uVision开发环境的步骤:
-
下载并安装Keil uVision:
- 访问Keil官网(https://www2.keil.com/)下载最新版本的Keil uVision。
- 按照安装向导的提示完成安装。
-
安装LPC1700系列支持包:
- 打开Keil uVision。
- 选择
Project->New uVision Project。 - 在弹出的对话框中选择LPC1700系列的芯片型号,例如LPC1768。
- 点击
Next,选择ARM->Cortex-M3->LPC17xx,然后点击Next。 - 选择
Use default settings for Target,点击Finish。
-
配置硬件调试工具:
- 选择
Project->Options for Target。 - 在
Target选项卡中选择合适的调试工具,例如LPC-Link2。 - 在
Debug选项卡中选择Use->CMSIS-DAP Debugger。
- 选择
-
创建项目文件:
- 在项目目录中创建一个新的文件夹,例如
LPC1700_Project。 - 将必要的源文件和库文件添加到项目中。
- 创建主程序文件
main.c。
- 在项目目录中创建一个新的文件夹,例如
1.2 LPCXpresso开发环境搭建
LPCXpresso是NXP官方提供的集成开发环境,专门为LPC系列单片机设计。以下是搭建LPCXpresso开发环境的步骤:
-
下载并安装LPCXpresso:
- 访问NXP官网(https://www.nxp.com/)下载LPCXpresso IDE。
- 按照安装向导的提示完成安装。
-
安装LPC1700系列支持包:
- 打开LPCXpresso。
- 选择
File->New->LPCXpresso Project。 - 在弹出的对话框中选择
LPC1768芯片型号,点击Next。 - 选择
Use default settings for Target,点击Finish。
-
配置硬件调试工具:
- 选择
Project->Properties。 - 在
C/C++ Build选项卡中配置编译器设置。 - 在
Debug选项卡中选择合适的调试工具,例如LPC-Link2。
- 选择
-
创建项目文件:
- 在项目目录中创建一个新的文件夹,例如
LPC1700_Project。 - 将必要的源文件和库文件添加到项目中。
- 创建主程序文件
main.c。
- 在项目目录中创建一个新的文件夹,例如
2. 基本硬件初始化
在开始编写应用程序之前,需要对LPC1700系列的硬件进行初始化。这包括时钟配置、GPIO初始化、中断配置等。本节将详细介绍这些初始化步骤。
2.1 时钟配置
LPC1700系列的时钟源可以是内部振荡器或外部晶振。以下是一个时钟配置的例子:
#include "LPC17xx.h" // 导入LPC1700系列的头文件
void SystemInit(void) {
// 使能外部晶振
LPC_SC->CCLKSEL = 0x00; // 选择外部晶振作为主时钟源
LPC_SC->CCLKCFG = 0x07; // 设置主时钟分频因子
LPC_SC->PLL0CON = 0x01; // 使能PLL0
LPC_SC->PLL0CFG = 0x24; // 设置PLL0配置
LPC_SC->PLL0CON = 0x03; // 连接PLL0
LPC_SC->CCLKSEL = 0x01; // 选择PLL0输出作为系统时钟源
LPC_SC->PLL0STAT = 0x03; // 确认PLL0状态
LPC_SC->SYSOSCCTRL = 0x02; // 使能外部晶振
LPC_SC->PDRUNCFG &= ~(1 << 5); // 使能外部晶振
LPC_SC->CCLKCFG = 0x07; // 设置系统时钟分频因子
}
int main(void) {
SystemInit(); // 初始化系统时钟
// 其他初始化代码
while (1) {
// 主程序
}
}
2.2 GPIO初始化
LPC1700系列的GPIO(通用输入输出)接口可以用于控制外部设备。以下是一个GPIO初始化的例子:
#include "LPC17xx.h"
void GPIO_Init(void) {
// 设置P0.0为输出模式
LPC_PINCON->PINSEL0 &= ~(3 << 0); // 清除P0.0的位选择
LPC_PINCON->PINSEL0 |= (0 << 0); // 设置P0.0为GPIO
LPC_GPIO0->FIODIR |= (1 << 0); // 设置P0.0为输出
}
int main(void) {
SystemInit(); // 初始化系统时钟
GPIO_Init(); // 初始化GPIO
while (1) {
LPC_GPIO0->FIOSET = (1 << 0); // 设置P0.0为高电平
LPC_SC->PCON |= (1 << 0); // 使能电源管理
LPC_SC->PCON &= ~(1 << 0); // 清除电源管理
LPC_GPIO0->FIOCLR = (1 << 0); // 设置P0.0为低电平
}
}
2.3 中断配置
LPC1700系列支持多种中断源,中断配置是实现复杂功能的重要步骤。以下是一个中断配置的例子:
#include "LPC17xx.h"
#include "NXP_LPC1700.h" // 导入LPC1700系列的库文件
void EINT3_IRQHandler(void) __attribute__((interrupt("IRQ"))); // 中断处理函数声明
void EINT3_IRQHandler(void) {
// 中断处理代码
LPC_SC->EXTINT = (1 << 3); // 清除外部中断3的状态
}
void NVIC_Init(void) {
// 使能外部中断3
LPC_SC->EXTMODE |= (1 << 3); // 设置外部中断3为边沿触发
LPC_SC->EXTPOLAR &= ~(1 << 3); // 设置外部中断3为下降沿触发
NVIC_EnableIRQ(EINT3_IRQn); // 使能外部中断3的中断
}
int main(void) {
SystemInit(); // 初始化系统时钟
GPIO_Init(); // 初始化GPIO
NVIC_Init(); // 初始化NVIC
// 设置P0.3为输入模式
LPC_PINCON->PINSEL6 &= ~(0x03 << 0); // 清除P0.3的位选择
LPC_PINCON->PINSEL6 |= (0x01 << 0); /

最低0.47元/天 解锁文章
1095

被折叠的 条评论
为什么被折叠?



