首页 > 其他分享 >LPC1100 系列_1.简介与入门

LPC1100 系列_1.简介与入门

时间:2024-11-05 20:47:38浏览次数:8  
标签:入门 Embedded UART 简介 配置 LPC1100 LPC ARM 调试

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 开发工具

  1. IDE(集成开发环境)

    • Keil MDK-ARM:Keil 是一个功能强大的集成开发环境,支持 ARM Cortex-M0 系列单片机的开发。
    • IAR Embedded Workbench:IAR 也是一个流行的开发工具,提供强大的调试功能和优化编译器。
    • GCC (GNU ARM Embedded Toolchain):GCC 是一个开源的编译器工具链,适合预算有限的开发者。
  2. 调试工具

    • J-Link:由 Segger 公司提供的调试工具,支持各种 ARM 单片机。
    • ULINK2:由 Keil 公司提供的调试工具,与 Keil IDE 配合使用效果最佳。
    • ST-Link:由 STMicroelectronics 公司提供的调试工具,性价比高。
  3. 硬件平台

    • LPCXpresso1114 板:NXP 官方提供的开发板,包含 JTAG/SWD 调试接口和简单的外围设备。
    • 自定义开发板:可以根据项目需求设计和制作自定义开发板。

1.2.2 安装开发工具

安装 Keil MDK-ARM
  1. 访问 Keil 官网并下载 MDK-ARM 软件。
  2. 安装软件,选择 ARM Cortex-M0 支持包。
  3. 注册并获取许可证。
安装 IAR Embedded Workbench
  1. 访问 IAR 官网并下载 Embedded Workbench for ARM。
  2. 安装软件,选择 ARM Cortex-M0 支持包。
  3. 注册并获取许可证。
安装 GCC (GNU ARM Embedded Toolchain)
  1. 访问 GNU ARM Embedded Toolchain 官网并下载安装包。
  2. 按照安装说明进行安装。
  3. 配置环境变量,使命令行工具可用。

1.2.3 创建第一个项目

使用 Keil MDK-ARM
  1. 打开 Keil MDK-ARM 软件。
  2. 选择 “New uVision Project”。
  3. 选择 LPC1100 系列的芯片型号,例如 LPC1114。
  4. 选择 “ARM” 作为编译工具链。
  5. 添加源文件和头文件。
  6. 配置项目选项,包括编译器设置、链接器设置和调试设置。
  7. 编译项目并下载到目标板。
使用 IAR Embedded Workbench
  1. 打开 IAR Embedded Workbench 软件。
  2. 选择 “New Project”。
  3. 选择 LPC1100 系列的芯片型号,例如 LPC1114。
  4. 选择 “C/C++” 作为项目类型。
  5. 添加源文件和头文件。
  6. 配置项目选项,包括编译器设置、链接器设置和调试设置。
  7. 编译项目并下载到目标板。
使用 GCC (GNU ARM Embedded Toolchain)
  1. 创建一个新的项目文件夹。

  2. 在项目文件夹中创建源文件和头文件。

  3. 编写 Makefile 或使用 CMake 配置项目。

  4. 使用命令行编译项目,例如:

    # 编译源文件
    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
    
  5. 使用调试工具下载二进制文件到目标板。

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 调试接口已正确连接。

  1. 电源连接:将开发板连接到电源适配器或 USB 接口。
  2. 调试接口连接:使用 JTAG/SWD 适配器将开发板连接到计算机。
  3. LED 连接:确认 P0.17 引脚上的 LED 已正确连接。

1.2.6 项目配置

Keil MDK-ARM
  1. 打开项目设置,选择 “Target” 选项卡。
  2. 选择芯片型号 LPC1114。
  3. 选择调试工具,例如 ULINK2。
  4. 配置输出文件路径和名称。
  5. 选择 “C/C++” 选项卡,配置编译器选项,例如优化级别和调试信息。
  6. 选择 “Linker” 选项卡,配置链接器选项,例如内存布局和输出格式。
IAR Embedded Workbench
  1. 打开项目设置,选择 “General Options” 选项卡。
  2. 选择芯片型号 LPC1114。
  3. 选择调试工具,例如 J-Link。
  4. 配置输出文件路径和名称。
  5. 选择 “C/C++ Compiler” 选项卡,配置编译器选项,例如优化级别和调试信息。
  6. 选择 “Linker” 选项卡,配置链接器选项,例如内存布局和输出格式。
GCC (GNU ARM Embedded Toolchain)
  1. 编写或配置 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)
    
  2. 使用命令行编译和链接项目。

  3. 使用调试工具下载二进制文件到目标板。

1.2.7 调试技巧

  1. 单步调试:使用调试工具单步执行代码,观察变量和寄存器的变化。
  2. 断点设置:在关键代码行设置断点,帮助定位问题。
  3. 观察变量:在调试过程中观察关键变量的值,确保逻辑正确。
  4. 查看寄存器:观察 ARM Cortex-M0 的寄存器状态,了解硬件行为。
  5. 日志输出:使用 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 常见问题及解决方案

  1. 编译错误

    • 问题:编译器报告找不到头文件。
    • 解决方案:检查头文件路径是否正确配置。
  2. 下载失败

    • 问题:调试工具无法连接到目标板。
    • 解决方案:检查调试接口和电源连接是否正确,确保目标板没有其他程序运行。
  3. LED 不亮

    • 问题:LED 不亮或闪烁不正常。
    • 解决方案:检查 GPIO 配置是否正确,确保 LED 连接无误。
  4. UART 不工作

    • 问题:通过 UART 发送的字符没有显示在终端上。
    • 解决方案:检查 UART 配置是否正确,确保终端软件的波特率设置与代码一致。

1.2.10 参考资料

  1. LPC11xx 用户手册:提供详细的硬件和寄存器描述。可以在 NXP 官网下载最新版本的用户手册,其中包含了芯片的所有特性和详细配置信息。
  2. ARM Cortex-M0 参考手册:提供 ARM Cortex-M0 内核的详细说明,包括指令集、寄存器和中断处理等。可以在 ARM 官网下载该手册,对于理解 LPC1100 系列的底层运作非常有帮助。
  3. Keil MDK-ARM 用户指南:提供 Keil IDE 的详细使用说明,包括项目创建、编译、调试和下载等步骤。可以在 Keil 官网下载用户指南。
  4. IAR Embedded Workbench 用户指南:提供 IAR IDE 的详细使用说明,包括项目创建、编译、调试和下载等步骤。可以在 IAR 官网下载用户指南。
  5. GCC (GNU ARM Embedded Toolchain) 文档:提供 GCC 工具链的详细使用说明,包括编译器选项、链接器选项和 Makefile 的编写。可以在 GNU ARM Embedded Toolchain 官网下载相关文档。
  6. LPCXpresso1114 开发板用户手册:提供开发板的详细使用说明,包括硬件连接、开发环境配置和示例代码。可以在 NXP 官网下载该手册。
  7. J-Link 调试工具用户手册:提供 J-Link 调试工具的详细使用说明,包括安装、配置和调试步骤。可以在 Segger 官网下载用户手册。
  8. ULINK2 调试工具用户手册:提供 ULINK2 调试工具的详细使用说明,包括安装、配置和调试步骤。可以在 Keil 官网下载用户手册。
  9. ST-Link 调试工具用户手册:提供 ST-Link 调试工具的详细使用说明,包括安装、配置和调试步骤。可以在 STMicroelectronics 官网下载用户手册。

1.2.11 总结

通过以上内容,我们详细介绍了 LPC1100 系列单片机的开发环境搭建、项目创建、示例代码编写以及调试技巧。无论你是使用 Keil MDK-ARM、IAR Embedded Workbench 还是 GCC (GNU ARM Embedded Toolchain),都能找到适合你的开发工具和配置方法。以下是一些关键点的总结:

  1. 选择开发工具:根据项目需求和个人偏好选择合适的开发工具,如 Keil MDK-ARM、IAR Embedded Workbench 或 GCC。
  2. 安装开发工具:按照官方文档安装开发工具,并配置必要的支持包和许可证。
  3. 创建项目:在选择的 IDE 中创建新项目,选择正确的芯片型号和编译工具链,添加源文件和头文件,配置项目选项。
  4. 示例代码:编写简单的示例代码,如点亮 LED 或通过 UART 输出调试信息,帮助你快速上手。
  5. 硬件连接:确保开发板的电源和调试接口正确连接,检查 LED 和其他外设的连接是否正确。
  6. 调试技巧:使用单步调试、断点设置、观察变量和寄存器状态等技巧,帮助你快速定位和解决问题。
  7. 常见问题及解决方案:遇到编译错误、下载失败、LED 不亮或 UART 不工作等问题时,可以参考常见的解决方案。

希望这些内容能帮助你顺利开始 LPC1100 系列单片机的开发工作。如果有任何疑问或需要进一步的帮助,可以参考 NXP 官方论坛或社区资源。

1.2.12 进一步学习

为了更深入地了解 LPC1100 系列单片机的开发,建议进一步学习以下内容:

  1. 外设编程:学习如何使用 ADC、DAC、PWM、I2C、SPI 等外设进行更复杂的开发。
  2. 中断处理:掌握如何配置和处理中断,提高程序的响应速度和实时性。
  3. 低功耗模式:了解如何配置和使用 LPC1100 系列的低功耗模式,延长电池供电设备的续航时间。
  4. 嵌入式操作系统:尝试在 LPC1100 系列上运行 FreeRTOS 或其他嵌入式操作系统,实现多任务管理和资源调度。
  5. 通信协议:学习如何实现更复杂的通信协议,如 CAN、USB 和 Ethernet 等。

通过这些进一步的学习,你将能够更好地利用 LPC1100 系列单片机的性能和功能,开发出更复杂和高效的嵌入式系统。

标签:入门,Embedded,UART,简介,配置,LPC1100,LPC,ARM,调试
From: https://blog.csdn.net/chenlz2007/article/details/143417438

相关文章

  • LPC1100 系列_2.架构与硬件特性
    2.架构与硬件特性2.1架构概述LPC1100系列是NXP公司基于ARMCortex-M0内核的微控制器系列。ARMCortex-M0是ARM公司推出的一款低功耗、高性能的32位RISC处理器内核,适用于嵌入式系统和微控制器应用。LPC1100系列微控制器采用了Cortex-M0内核,具有以下主要......
  • JWT令牌——从入门到精通
    一、跨域认证的问题互联网服务离不开用户认证。一般流程是下面这样。1、用户向服务器发送用户名和密码。2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。3、服务器向用户返回一个session_id,写入用户的Cookie。4、用户随后的每一......
  • Nop入门: 动态SQL管理
    Nop平台提供了类似MyBatis的动态SQL管理能力,但是功能特性远比MyBatis丰富、强大。同时它的实现反而更加简单,在NopORM的基础上实现SqlLibManager只需要300多行的代码。一.使用说明1.1增加一个sql-lib.xml文件<!--/nop/demo/sql/demo.sql-lib.xml--><sql-libx:schema......
  • ONLYOFFICE办公软件的简介与体验
    官网链接ONLYOFFICE-企业在线办公应用软件|ONLYOFFICE引言在数字化时代,办公软件已成为我们日常工作和生活中不可或缺的一部分。随着技术的发展和工作方式的变化,传统的办公软件逐渐显露出其局限性,不再能满足我们对效率和便捷性的日益增长的需求。面对这一挑战,ONLYOFFICE......
  • rust学习二、入门之运行单个脚本
    入门者,在搭建好环境好之后,接下来得先熟悉工具。有了趁手的工具,学起来才会快得多!作为入门者,非常希望能够单独运行一个rust脚本,而没有必要一个练习就建立一个项目。在https://crates.io上,我们可以找到各种各样的工具,有两个可以关注:cargo-script ,很不幸的是,这个项目自从2017年......
  • 专业术语简介【一】:没有银弹、加盐、毛刺、冒烟测试、热备
    〇、前言了解行业术语是一个程序猿的基本素养,只有更深入的了解才能与其他人畅快沟通,下面来简单汇总下,会持续更新。欢迎评论区补充,博主会逐个加入后续文章。一、“没有银弹”从字面意思来看就是,没有银色的子弹。当然不可能这么简单。其实,它出自计算机科学家布鲁克斯《没有银弹......
  • Java入门十二——static详解(含toString)
    上节课,我们只是微微提到了static,今天我们来具体讲讲static的用法static1.类名.静态成员变量(上篇博客Java入门十一有讲)为了方便大家查看,我把链接放在这里Java入门11——关键字总结+static-CSDN博客2.类名.静态成员方法这里,我们首先创建两个类,分别是java12和demo1,然后调用d......
  • 全网最详细大语言模型(LLM)入门学习路线图
    Github项目上有一个大语言模型学习路线笔记,它全面涵盖了大语言模型的所需的基础知识学习,LLM前沿算法和架构,以及如何将大语言模型进行工程化实践。这份资料是初学者或有一定基础的开发/算法人员入门活深入大型语言模型学习的优秀参考。这份资料重点介绍了我们应该掌握哪些核......
  • Go 语言变量类型:从入门到精通,一篇搞定所有知识点!
    Go语言变量类型1.基本类型1.1数值类型1.2布尔类型1.3字符串类型2.复合类型2.1数组2.2切片2.3字典(map)2.4结构体2.5接口3.类型转换4.零值5.示例1.基本类型Go语言中的基本类型主要包括数值类型、布尔类型和字符串类型。1.1数值类型整型:int:根据......
  • 挖漏洞怎么赚钱?挖漏洞入门到精通,收藏这篇就够了
    我就是一个最普通的网络安全工程师,出道快10年了,不出意外地遭遇到瓶颈期,但是凭技术在各大平台挖漏洞副业,硬是妥妥扛过来了。因为对于程序员来讲,这是个试错成本很低、事半功倍的选择。编程技能是一种强大生产力,决定程序员是一个高薪职业,同时由于技术迭代太快,决定程序员也是......