在纽伦堡Embedded World 2017 期间,我很幸运地得到了一些LPC800-DIP开发板。为了让大家能够更好的了解该开发板,本文主要介绍了如何在该开发板上创建一个LED指示灯闪烁的应用程序:
概要
本文主要展示了如何使用Eclipse(MCUXpresso IDE)和NXP LPCOpen库在LPC800-DIP开发板上运行首个LED闪烁程序(在开发板上实现切换LED)。
你需要以下工具:
■ LPC800-DIP开发板或其他LPC8xx开发板,在这种情况下,您需要更改源代码中的LED引脚
■ MCUXpresso IDE V10.0.0 b344
■ Micro USB电缆
■ SWD / JTAG调试器,如LPC-Link2
LPC800-DIP开发板
LPC800-DIP是一个微型开发板,其采用的是NXP LPC824微控制器:
它采用的是LPC824M201JHI33(32位Cortex-M0+内核、32 KB闪存、4 KB RAM),并将引脚友好的引出。可以使用SWD或通过Silabs CP2102 UART-USB桥烧写微控制器:按下ISP按钮,我可以通过连接到主机的USB以及FlashMagic实用程序烧写该控制器。
SDK:LPC开发板和LPC芯片项目
开发板上手前,我需要一个软件库或SDK。对于LPC800,NXP提供LPCOpen库。MCUXpresso IDE已经安装了该库:
或者,可以在这里找到他们::http://www.nxp.com/products/soft ... SOFTWARE-FOR-LPC8XX
使用MCUXpresso IDE的“Quickstart”面板中的“Import project(s) from file system…”将库项目导入到我的工作空间中:
然后浏览LPCOpen存档文件:
C:\ NXP \ MCUXpressoIDE_10.0.0_344 \ IDE \实例\ LPCOpen \ lpcopen_2_19_lpcxpresso_nxp_lpcxpresso_824.zip
按下一步。提示我选择需要导入的项目。我需要我选择的芯片库:
“chip”库正如其名,表示支持给定的芯片。我也可以导入开发板库或示例项目。对于LED闪烁项目,我需要的是芯片库,然后我将会编写自己的LED板级支持。
单击Finish,然后工作区中就会显示相应的芯片库:
建立项目
接下来为开发板创建一个新项目。我再次使用Quickstart面板上的New Project:
选择LPC824:
单击Next。选择LPCOpen C Project:
单击Next,并给项目命名:
在接下来的对话框中,它应该会检测我的工作区中存在的芯片库:
单击Next。在接下来的对话框中,我使用的是默认参数,直到完成向导并在工作区中创建项目:
原理图和LED
检查电路板的原理图,我可以看到电路板上的三个LED分别连接到PIO0_17、PIO0_16和PIO0_15:
LED的阴极侧连接到微控制器。所以这意味着我必须将引脚设置成LOW,然后点亮LED指示灯(LED为低电平有效)。
GPIO引脚
我将以下内容添加到程序中: - #include "gpio_8xx.h"
-
- /* GPIO pin numbers for LEDs */
- #define RED_LED 15
- #define GREEN_LED 16
- #define BLUE_LED 17
复制代码
这包括GPIO外设的头文件,我已经添加了三个LED使用的GPIO引脚的定义。
GPIO初始化
要使用GPIO引脚,必须先进行初始化。我在“BoardInit()”函数中执行以下操作:
1. 启用GPIO外设的时钟
2. 将引脚配置为输出引脚
3. 使用高电平初始化。 LED为低电平有效,因此设置成HIGH(或TRUE)将熄灭LED。
以下是我的BoardInit()函数:
延迟
因为我需要延迟LED的闪烁,所以我添加了一个非常简单的延迟程序来消耗CPU周期: - static void delay(void) {
- /* very simply delay routine */
- volatile uint32_t cntr = 0x80000;
- while(cntr>0) { /* burn some cycles */
- cntr--;
- __asm volatile("nop\n");
- }
- }
复制代码
main()函数中的板级初始化
在main()中,我调用BoardInit()来初始化硬件:
LED闪烁
最后,在main()添加一些代码来执行闪烁。 - Chip_GPIO_SetPinState(LPC_GPIO_PORT, 0, RED_LED, true);
复制代码
红色LED指示灯熄灭,并且使用下面代码可以打开LED: - Chip_GPIO_SetPinState(LPC_GPIO_PORT, 0, RED_LED, false);
复制代码
在LED开/关之间,我添加了对延迟程序的调用,以减慢main()中的内容: - while(1) {
- Chip_GPIO_SetPinState(LPC_GPIO_PORT, 0, RED_LED, true);
- delay();
- Chip_GPIO_SetPinState(LPC_GPIO_PORT, 0, RED_LED, false);
- delay();
- Chip_GPIO_SetPinState(LPC_GPIO_PORT, 0, GREEN_LED, true);
- delay();
- Chip_GPIO_SetPinState(LPC_GPIO_PORT, 0, GREEN_LED, false);
- delay();
- Chip_GPIO_SetPinState(LPC_GPIO_PORT, 0, BLUE_LED, true);
- delay();
- Chip_GPIO_SetPinState(LPC_GPIO_PORT, 0, BLUE_LED, false);
- delay();
- i++ ;
- }
复制代码
构建
在“快速入门”面板中使用“锤子”来构建项目:
应该构建没有任何错误:-)。
调试
该开发板有SWD / JTAG插头。我喜欢这种方式,不用使用FlashMagic工具编程开发板,因为我可以调试它。但这需要一个SWD / JTAG调试器,像我在这里使用的LPC-Link2。
将SWD电缆连接到LPC800-DIP开发板上的SWD插头。在这种情况下,我在LPC-Link2设置了跳线JP2,所以我从LPC-Link2向开发板供电。如果使用另一个调试器,则可能需要使用微型USB电缆为LPC800开发板供电。
使用快速启动面板中的“蓝色”调试图标启动调试,它应该会识别调试器:
按下OK,开始调试开发板:
总结
LPC800-DIP开发板是一个小型的开发平台,搭载了Cortex-M0微控制器,使其成为小型项目的理想选择。对于LPC8xx系列,没有MCUXpresso SDK。但是MCUXpresso IDE配备了LPCOpen SDK,可以在很短的时间内实现一个可以闪烁的功能。很感谢它有一个SWD调试插头,所以我可以使用我最喜欢的JTAG / SWD调试器和Eclipse。
恩智浦告诉我,LPC800-DIP开发板现在还未出售。恩智浦在德国Embedded World 2017展会上赠送了许多这些电路板,所以您可能会很幸运得到一个开发板,可以用于本文。
参考链接 ■ LPC800-DIP Schematics:https://community.nxp.com/commun ... =watches.email.blog和https://community.nxp.com/commun ... pc800-dip-schematic ■ MCUXpresso IDE网页:http://www.nxp.com/mcuxpresso/ide ■ MCUXpresso IDE社区:http://www.nxp.com/mcuxpresso/ide/forum ■ LPC-Link2调试器:http://www.nxp.com/products/micr ... 0/lpc-link2:OM13054 ■ GitHub上的项目:https://github.com/ErichStyger/m ... UXpresso/LPC800-DIP
译者注:本文译自:https://mcuoneclipse.com/2017/05 ... p-lpc800-dip-board/,感谢 Erich Styger 做出的贡献,如有错漏,敬请指正! |