1. 简介与入门
1.1 LPC1100 系列概述
LPC1100 系列是 NXP 推出的一款基于 ARM Cortex-M0 内核的低功耗、高性能单片机。该系列单片机适用于各种嵌入式应用,包括传感器网络、工业控制、消费电子和医疗设备等。LPC1100 系列的主要特点包括:
- 低功耗:具有多种低功耗模式,适用于电池供电的设备。
- 高性能:基于 ARM Cortex-M0 内核,提供高达 50 MHz 的工作频率。
- 集成外设:集成了丰富的外设,如 UART、SPI、I2C、GPIO、定时器等。
- 小尺寸封装:提供多种封装选项,包括 QFN、LQFP 和 BGA,适合紧凑的设计。
- 易用性:支持多种开发工具和环境,如 Keil、IAR 和 GCC。
1.2 开发环境搭建
为了顺利进行 LPC1100 系列单片机的开发,需要搭建一个合适的开发环境。以下是推荐的开发工具和步骤:
1.2.1 开发工具
-
IDE(集成开发环境):
- Keil MDK-ARM:Keil 是一个功能强大的集成开发环境,支持 ARM Cortex-M0 系列单片机的开发。
- IAR Embedded Workbench:IAR 也是一个流行的开发工具,提供强大的调试功能和优化编译器。
- GCC (GNU ARM Embedded Toolchain):GCC 是一个开源的编译器工具链,适合预算有限的开发者。
-
调试工具:
- J-Link:由 Segger 公司提供的调试工具,支持各种 ARM 单片机。
- ULINK2:由 Keil 公司提供的调试工具,与 Keil IDE 配合使用效果最佳。
- ST-Link:由 STMicroelectronics 公司提供的调试工具,性价比高。
-
硬件平台:
- LPCXpresso1114 板:NXP 官方提供的开发板,包含 JTAG/SWD 调试接口和简单的外围设备。
- 自定义开发板:可以根据项目需求设计和制作自定义开发板。
1.2.2 安装开发工具
安装 Keil MDK-ARM
- 访问 Keil 官网并下载 MDK-ARM 软件。
- 安装软件,选择 ARM Cortex-M0 支持包。
- 注册并获取许可证。
安装 IAR Embedded Workbench
- 访问 IAR 官网并下载 Embedded Workbench for ARM。
- 安装软件,选择 ARM Cortex-M0 支持包。
- 注册并获取许可证。
安装 GCC (GNU ARM Embedded Toolchain)
- 访问 GNU ARM Embedded Toolchain 官网并下载安装包。
- 按照安装说明进行安装。
- 配置环境变量,使命令行工具可用。
1.2.3 创建第一个项目
使用 Keil MDK-ARM
- 打开 Keil MDK-ARM 软件。
- 选择 “New uVision Project”。
- 选择 LPC1100 系列的芯片型号,例如 LPC1114。
- 选择 “ARM” 作为编译工具链。
- 添加源文件和头文件。
- 配置项目选项,包括编译器设置、链接器设置和调试设置。
- 编译项目并下载到目标板。
使用 IAR Embedded Workbench
- 打开 IAR Embedded Workbench 软件。
- 选择 “New Project”。
- 选择 LPC1100 系列的芯片型号,例如 LPC1114。
- 选择 “C/C++” 作为项目类型。
- 添加源文件和头文件。
- 配置项目选项,包括编译器设置、链接器设置和调试设置。
- 编译项目并下载到目标板。
使用 GCC (GNU ARM Embedded Toolchain)
-
创建一个新的项目文件夹。
-
在项目文件夹中创建源文件和头文件。
-
编写 Makefile 或使用 CMake 配置项目。
-
使用命令行编译项目,例如:
# 编译源文件 arm-none-eabi-gcc -c main.c -o main.o # 链接目标文件 arm-none-eabi-gcc main.o -o main.elf # 生成二进制文件 arm-none-eabi-objcopy -O binary main.elf main.bin
-
使用调试工具下载二进制文件到目标板。
1.2.4 示例代码:点亮 LED
以下是一个简单的示例代码,用于点亮 LPC1114 开发板上的 LED。
Keil MDK-ARM 示例
#include "LPC11xx.h"
int main(void) {
// 配置 GPIO 模式
LPC_GPIO0->DIR |= (1 << 17); // 设置 P0.17 为输出
while (1) {
LPC_GPIO0->DATA |= (1 << 17); // 点亮 LED
for (volatile int i = 0; i < 1000000; i++); // 延时
LPC_GPIO0->DATA &= ~(1 << 17); // 熄灭 LED
for (volatile int i = 0; i < 1000000; i++); // 延时
}
}
IAR Embedded Workbench 示例
#include "LPC11xx.h"
int main(void) {
// 配置 GPIO 模式
LPC_GPIO0->DIR |= (1 << 17); // 设置 P0.17 为输出
while (1) {
LPC_GPIO0->DATA |= (1 << 17); // 点亮 LED
for (volatile int i = 0; i < 1000000; i++); // 延时
LPC_GPIO0->DATA &= ~(1 << 17); // 熄灭 LED
for (volatile int i = 0; i < 1000000; i++); // 延时
}
}
GCC (GNU ARM Embedded Toolchain) 示例
#include "LPC11xx.h"
void delay(volatile int count) {
for (volatile int i = 0; i < count; i++);
}
int main(void) {
// 配置 GPIO 模式
LPC_GPIO0->DIR |= (1 << 17); // 设置 P0.17 为输出
while (1) {
LPC_GPIO0->DATA |= (1 << 17); // 点亮 LED
delay(1000000); // 延时
LPC_GPIO0->DATA &= ~(1 << 17); // 熄灭 LED
delay(1000000); // 延时
}
}
1.2.5 硬件连接
在 LPCXpresso1114 开发板上,P0.17 引脚连接到一个 LED。确保开发板的电源和 JTAG/SWD 调试接口已正确连接。
- 电源连接:将开发板连接到电源适配器或 USB 接口。
- 调试接口连接:使用 JTAG/SWD 适配器将开发板连接到计算机。
- LED 连接:确认 P0.17 引脚上的 LED 已正确连接。
1.2.6 项目配置
Keil MDK-ARM
- 打开项目设置,选择 “Target” 选项卡。
- 选择芯片型号 LPC1114。
- 选择调试工具,例如 ULINK2。
- 配置输出文件路径和名称。
- 选择 “C/C++” 选项卡,配置编译器选项,例如优化级别和调试信息。
- 选择 “Linker” 选项卡,配置链接器选项,例如内存布局和输出格式。
IAR Embedded Workbench
- 打开项目设置,选择 “General Options” 选项卡。
- 选择芯片型号 LPC1114。
- 选择调试工具,例如 J-Link。
- 配置输出文件路径和名称。
- 选择 “C/C++ Compiler” 选项卡,配置编译器选项,例如优化级别和调试信息。
- 选择 “Linker” 选项卡,配置链接器选项,例如内存布局和输出格式。
GCC (GNU ARM Embedded Toolchain)
-
编写或配置 Makefile,例如:
# 编译器路径 ARMCC = arm-none-eabi-gcc ARMLD = arm-none-eabi-gcc ARMOC = arm-none-eabi-objcopy # 源文件 SRC = main.c # 输出文件 OBJ = main.o ELF = main.elf BIN = main.bin all: $(OBJ) $(ARMLD) $(OBJ) -o $(ELF) $(ARMOC) -O binary $(ELF) $(BIN) $(OBJ): $(SRC) $(ARMCC) -c $(SRC) -o $(OBJ) clean: rm -f $(OBJ) $(ELF) $(BIN)
-
使用命令行编译和链接项目。
-
使用调试工具下载二进制文件到目标板。
1.2.7 调试技巧
- 单步调试:使用调试工具单步执行代码,观察变量和寄存器的变化。
- 断点设置:在关键代码行设置断点,帮助定位问题。
- 观察变量:在调试过程中观察关键变量的值,确保逻辑正确。
- 查看寄存器:观察 ARM Cortex-M0 的寄存器状态,了解硬件行为。
- 日志输出:使用 UART 或其他外设输出调试信息,便于问题排查。
1.2.8 代码示例:通过 UART 输出调试信息
以下是一个通过 UART 输出调试信息的示例代码,适用于 LPC1114。
Keil MDK-ARM 示例
#include "LPC11xx.h"
void UART_Init(void) {
// 配置 UART 时钟
LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 12); // 使能 UART 时钟
LPC_SYSCON->UARTCLKDIV = 1; // 设置 UART 时钟分频
// 配置 UART 波特率
LPC_USART->LCR = 0x83; // 8 位数据,无奇偶校验,1 位停止位,访问 DLM 和 DLL
LPC_USART->DLM = 0; // 波特率分频高位
LPC_USART->DLL = 25; // 波特率分频低位 (9600 波特率)
LPC_USART->LCR = 0x03; // 8 位数据,无奇偶校验,1 位停止位
// 配置 FIFO
LPC_USART->FCR = 0x07; // 使能 FIFO,清空 FIFO,设置触发点为 1 字节
// 配置 GPIO
LPC_GPIO0->DIR |= (1 << 0); // 设置 P0.0 为输出
LPC_PINCON->PINSEL0 = (LPC_PINCON->PINSEL0 & ~0x000000FF) | 0x00000055; // 配置 P0.0 和 P0.1 为 UART0
}
void UART_SendChar(char data) {
while (!(LPC_USART->LSR & 0x20)); // 等待发送缓冲区为空
LPC_USART->THR = data; // 发送字符
}
void UART_SendString(char *str) {
while (*str) {
UART_SendChar(*str++);
}
}
int main(void) {
UART_Init(); // 初始化 UART
while (1) {
UART_SendString("Hello, LPC1114!\r\n"); // 发送字符串
for (volatile int i = 0; i < 1000000; i++); // 延时
}
}
IAR Embedded Workbench 示例
#include "LPC11xx.h"
void UART_Init(void) {
// 配置 UART 时钟
LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 12); // 使能 UART 时钟
LPC_SYSCON->UARTCLKDIV = 1; // 设置 UART 时钟分频
// 配置 UART 波特率
LPC_USART->LCR = 0x83; // 8 位数据,无奇偶校验,1 位停止位,访问 DLM 和 DLL
LPC_USART->DLM = 0; // 波特率分频高位
LPC_USART->DLL = 25; // 波特率分频低位 (9600 波特率)
LPC_USART->LCR = 0x03; // 8 位数据,无奇偶校验,1 位停止位
// 配置 FIFO
LPC_USART->FCR = 0x07; // 使能 FIFO,清空 FIFO,设置触发点为 1 字节
// 配置 GPIO
LPC_GPIO0->DIR |= (1 << 0); // 设置 P0.0 为输出
LPC_PINCON->PINSEL0 = (LPC_PINCON->PINSEL0 & ~0x000000FF) | 0x00000055; // 配置 P0.0 和 P0.1 为 UART0
}
void UART_SendChar(char data) {
while (!(LPC_USART->LSR & 0x20)); // 等待发送缓冲区为空
LPC_USART->THR = data; // 发送字符
}
void UART_SendString(char *str) {
while (*str) {
UART_SendChar(*str++);
}
}
int main(void) {
UART_Init(); // 初始化 UART
while (1) {
UART_SendString("Hello, LPC1114!\r\n"); // 发送字符串
for (volatile int i = 0; i < 1000000; i++); // 延时
}
}
GCC (GNU ARM Embedded Toolchain) 示例
#include "LPC11xx.h"
void UART_Init(void) {
// 配置 UART 时钟
LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 12); // 使能 UART 时钟
LPC_SYSCON->UARTCLKDIV = 1; // 设置 UART 时钟分频
// 配置 UART 波特率
LPC_USART->LCR = 0x83; // 8 位数据,无奇偶校验,1 位停止位,访问 DLM 和 DLL
LPC_USART->DLM = 0; // 波特率分频高位
LPC_USART->DLL = 25; // 波特率分频低位 (9600 波特率)
LPC_USART->LCR = 0x03; // 8 位数据,无奇偶校验,1 位停止位
// 配置 FIFO
LPC_USART->FCR = 0x07; // 使能 FIFO,清空 FIFO,设置触发点为 1 字节
// 配置 GPIO
LPC_GPIO0->DIR |= (1 << 0); // 设置 P0.0 为输出
LPC_PINCON->PINSEL0 = (LPC_PINCON->PINSEL0 & ~0x000000FF) | 0x00000055; // 配置 P0.0 和 P0.1 为 UART0
}
void UART_SendChar(char data) {
while (!(LPC_USART->LSR & 0x20)); // 等待发送缓冲区为空
LPC_USART->THR = data; // 发送字符
}
void UART_SendString(char *str) {
while (*str) {
UART_SendChar(*str++);
}
}
int main(void) {
UART_Init(); // 初始化 UART
while (1) {
UART_SendString("Hello, LPC1114!\r\n"); // 发送字符串
for (volatile int i = 0; i < 1000000; i++); // 延时
}
}
1.2.9 常见问题及解决方案
-
编译错误:
- 问题:编译器报告找不到头文件。
- 解决方案:检查头文件路径是否正确配置。
-
下载失败:
- 问题:调试工具无法连接到目标板。
- 解决方案:检查调试接口和电源连接是否正确,确保目标板没有其他程序运行。
-
LED 不亮:
- 问题:LED 不亮或闪烁不正常。
- 解决方案:检查 GPIO 配置是否正确,确保 LED 连接无误。
-
UART 不工作:
- 问题:通过 UART 发送的字符没有显示在终端上。
- 解决方案:检查 UART 配置是否正确,确保终端软件的波特率设置与代码一致。
1.2.10 参考资料
- LPC11xx 用户手册:提供详细的硬件和寄存器描述。可以在 NXP 官网下载最新版本的用户手册,其中包含了芯片的所有特性和详细配置信息。
- ARM Cortex-M0 参考手册:提供 ARM Cortex-M0 内核的详细说明,包括指令集、寄存器和中断处理等。可以在 ARM 官网下载该手册,对于理解 LPC1100 系列的底层运作非常有帮助。
- Keil MDK-ARM 用户指南:提供 Keil IDE 的详细使用说明,包括项目创建、编译、调试和下载等步骤。可以在 Keil 官网下载用户指南。
- IAR Embedded Workbench 用户指南:提供 IAR IDE 的详细使用说明,包括项目创建、编译、调试和下载等步骤。可以在 IAR 官网下载用户指南。
- GCC (GNU ARM Embedded Toolchain) 文档:提供 GCC 工具链的详细使用说明,包括编译器选项、链接器选项和 Makefile 的编写。可以在 GNU ARM Embedded Toolchain 官网下载相关文档。
- LPCXpresso1114 开发板用户手册:提供开发板的详细使用说明,包括硬件连接、开发环境配置和示例代码。可以在 NXP 官网下载该手册。
- J-Link 调试工具用户手册:提供 J-Link 调试工具的详细使用说明,包括安装、配置和调试步骤。可以在 Segger 官网下载用户手册。
- ULINK2 调试工具用户手册:提供 ULINK2 调试工具的详细使用说明,包括安装、配置和调试步骤。可以在 Keil 官网下载用户手册。
- ST-Link 调试工具用户手册:提供 ST-Link 调试工具的详细使用说明,包括安装、配置和调试步骤。可以在 STMicroelectronics 官网下载用户手册。
1.2.11 总结
通过以上内容,我们详细介绍了 LPC1100 系列单片机的开发环境搭建、项目创建、示例代码编写以及调试技巧。无论你是使用 Keil MDK-ARM、IAR Embedded Workbench 还是 GCC (GNU ARM Embedded Toolchain),都能找到适合你的开发工具和配置方法。以下是一些关键点的总结:
- 选择开发工具:根据项目需求和个人偏好选择合适的开发工具,如 Keil MDK-ARM、IAR Embedded Workbench 或 GCC。
- 安装开发工具:按照官方文档安装开发工具,并配置必要的支持包和许可证。
- 创建项目:在选择的 IDE 中创建新项目,选择正确的芯片型号和编译工具链,添加源文件和头文件,配置项目选项。
- 示例代码:编写简单的示例代码,如点亮 LED 或通过 UART 输出调试信息,帮助你快速上手。
- 硬件连接:确保开发板的电源和调试接口正确连接,检查 LED 和其他外设的连接是否正确。
- 调试技巧:使用单步调试、断点设置、观察变量和寄存器状态等技巧,帮助你快速定位和解决问题。
- 常见问题及解决方案:遇到编译错误、下载失败、LED 不亮或 UART 不工作等问题时,可以参考常见的解决方案。
希望这些内容能帮助你顺利开始 LPC1100 系列单片机的开发工作。如果有任何疑问或需要进一步的帮助,可以参考 NXP 官方论坛或社区资源。
1.2.12 进一步学习
为了更深入地了解 LPC1100 系列单片机的开发,建议进一步学习以下内容:
- 外设编程:学习如何使用 ADC、DAC、PWM、I2C、SPI 等外设进行更复杂的开发。
- 中断处理:掌握如何配置和处理中断,提高程序的响应速度和实时性。
- 低功耗模式:了解如何配置和使用 LPC1100 系列的低功耗模式,延长电池供电设备的续航时间。
- 嵌入式操作系统:尝试在 LPC1100 系列上运行 FreeRTOS 或其他嵌入式操作系统,实现多任务管理和资源调度。
- 通信协议:学习如何实现更复杂的通信协议,如 CAN、USB 和 Ethernet 等。
通过这些进一步的学习,你将能够更好地利用 LPC1100 系列单片机的性能和功能,开发出更复杂和高效的嵌入式系统。
标签:入门,Embedded,UART,简介,配置,LPC1100,LPC,ARM,调试 From: https://blog.csdn.net/chenlz2007/article/details/143417438