|
本文档主要介绍了如何使用MCUXpresso IDE为LPCXpresso1549开发板创建一个新项目。 值得一提的是,官方没有提供针对LPC15xx器件系列的SDK,因此我们使用的是LPCOpen库。
MCUXpresso IDE介绍 MCUXpresso IDE基于Eclipse IDE,并包含业界标准的ARM GNU工具链。它为基于Cortex-M内核的NXP MCU(LPC和Kinetis)提供了易于使用和无限制代码大小的开发环境。 MCUXpresso IDE调试连接支持Freedom、Tower、LPCXpresso和您的定制开发板,并且具有行业领先的开源和商业级的调试仿真器,包括LPC-Link2、P&E和SEGGER。全功能调试器支持SWD和JTAG调试,并且可以直接下载到片上闪存。
当安装了MCUXpresso IDE时,它将包含大多数基于LPC的MCU的预安装的器件支持。这些预安装器件的示例代码由复杂的LPCOpen软件包(和代码包)提供。每个软件包都包含了代码库,以支持MCU功能、LPCXpresso开发板(以及其他一些常见的),同时包含了大量的代码示例和驱动程序。
此外,MCUXpresso IDE的器件支持可以使用免费提供的MCUXpresso SDK2.x软件包进行扩展。这些可以通过简单的“拖放”进行安装,并且使用新的器件知识和示例自动扩展IDE。 MCUXpresso IDE的SDK可以根据需要使用MCUXpresso Config Tools网站上的SDK Builder生成和下载:http://mcuxpresso.nxp.com/
创建一个新项目 在本文档中,我们使用的是LPCXpresso1549开发板(提供了该MCU的LPCOpen项目),同时对于任何LPCXpresso开发板,该过程是相同的。 需要为您的目标MCU /开发板板下载相关的LPCOpen软件包,并将其导入工作区,LPCOpen可以在以下链接中获得:http://www.nxp.com/lpcopen
1. 在“QuickStart panel”面板中选择“New project”,然后打开一个新窗口:
2. 选择期望的开发板。本例中,我们使用的是LPCXpresso1549开发板,然后单击“Next”。 注意:当选择该开发板时,可以从上图中突出显示的部分看到MCU(器件)会自动选择匹配。如果没有匹配的开发板,则可以从预安装的MCU列表中选择所需的MCU。
3. MCUXpresso IDE包含许多项目模板,可以为具体的MCU快速创建正确配置的项目。 这个New Project向导支持两种类型的项目: ● 那些针对LPCOpen库 ● 独立项目 在本例中,我们将展示创建LPCOpen-C project的步骤。该选项会创建一个简单的C项目,main()函数由一个累加计数器的无限while(1)循环组成。此外,还将包括代码以来初始化开发板和启用LED。
4. 选择项目名称,然后单击“Next”。
5. 在创建基于LPCOpen的项目时,您将看到的第一个选项页面是LPCOpen库选择页面。 必须导入所使用器件的LPCOpen芯片库和可选的LPCOpen Board Library Project,如果还没有这样做,下面的窗口允许导入库。按照以下步骤: a. 单击“Import…”,将出现一个新窗口,选择要导入的存档文件。这种情况下,导入的项目包含在archive.zip中。在本例中,选择LPCXpresso1549开发板。单击“Open”。然后单击“Next”。
b. 只需选择LPCOpen芯片库和LPCOpen开发板库项目。单击“Finish”。
6. 选择LPCOpen库。单击“Next”。
7. 选择CMSIS库项目。 MCUXpresso IDE中的CMSIS库选项允许您从要创建的项目中选择要连接的CMSISCORE库(如果有)。对于这种情况,我们选择“None”作为默认值。单击”Next” 注意:在大多数情况下,对于新项目,建议使用LPCOpen而不是CMSIS-CORE库项目。
8. 启用SWO跟踪时钟。单击“Next”。
9. 启用CRP的链接器支持。单击“Next”。
10. 某些器件的“Semihosting C Project”向导提供了两个选项,用于配置从Redlib C库中获取的printf系列函数的实现: ● 使用非浮点版本的printf ● 如果您的应用程序不需要将浮点数传递给printf()系列函数,则可以选择printf的非浮点变量。这将有助于减少应用程序的代码大小。 ● 对于向导不提供此选项的MCU,可以通过向项目属性添加符号CR_INTEGER_PRINTF来产生相同的效果。 ● 使用字符而不是基于字符串的printf ● 默认情况下,printf()和puts()使用malloc()在堆上提供临时缓冲区,以产生要显示的字符串。启用此选项切换到使用这些函数的“character-by-character”版本(不需要额外的堆空间)。这可能是有用的,例如,如果您要重定向printf()来在UART上写出数据 - 因为在这种情况下,创建一个临时缓冲区来存储整个字符串,只在UART上一次打印出一个字符,它是无意义的。 ● 对于向导不提供此选项的MCU,可以通过向项目属性添加符号CR_PRINTF_CHAR来产生相同的效果。
本例中,我们将使用默认值。
11. 选择适当的选项后,您可以单击Finish按钮,然后向导将为您创建项目,以及适当的启动代码和简单的main.c文件。
12. 这时,您应该能够构建和调试此项目。
编写我的第一个项目 LPCOpen芯片库(本例中为lpc_chip_15xx)包含一些LPC外设的驱动程序。对于这些示例,我们将使用GPIO驱动程序。
LPCOpen开发板库项目(本例中为lpc_board_nxp_lpcxpresso_1549)包含具有软件API函数的文件,它们提供了一些简单的抽象函数,可以交叉用于多个LPCOpen开发板示例。
board_api.h包含通用的板卡定义,在板卡和器件中交叉共享。所有这些函数都不需要针对特定的电路板实现,但是如果它们被实现,他们应该使用这个API标准。 在使用MCUXpresso和LPCOpen创建一个新项目之后,它创建了一个简单的C项目,该项目初始化开发板,并使用Board_LED_Set功能将LED设置为“On”状态。
在本例中,我们将使用一个按钮来切换一个LED。在LPCXpresso1549开发板上,LED连接到PIO1.1、PIO0.3和PIO0.25引脚。SW1连接到PIO0.17引脚。
函数Chip_GPIO_SetPinDIRInput将引脚配置为输入。 函数Chip_GPIO_GetPinState通过GPIO字节寄存器获取GPIO引脚状态。 函数Board_LED_Set将LED设置为“开”或“关”状态。
完整的代码(使用底部的按钮设置LED状态)。 - /*
- ===============================================================================
- Name : LPCXpresso_new_example.c
- Author : $(author)
- Version :
- Copyright : $(copyright)
- Description : main definition
- ===============================================================================
- */
-
- #if defined (__USE_LPCOPEN)
- #if defined(NO_BOARD_LIB)
- #include "chip.h"
- #else
- #include "board.h"
- #endif
- #endif
-
- #include <cr_section_macros.h>
-
-
- int main(void) {
- bool State_Input;
- #if defined (__USE_LPCOPEN)
- // Read clock settings and update SystemCoreClock variable
- SystemCoreClockUpdate();
- #if !defined(NO_BOARD_LIB)
- // Set up and initialize all required blocks and
- // functions related to the board hardware
- Board_Init();
- Chip_GPIO_SetPinDIRInput(LPC_GPIO, 0, 17); //Set GPIO direction for a single GPIO pin to an input
-
- #endif
- #endif
-
- while(1) {
- State_Input= Chip_GPIO_GetPinState (LPC_GPIO, 0, 17); //Get a GPIO pin state via the GPIO byte register
- if (State_Input==0){
- Board_LED_Set(0, true); // Set the LED to the state of "On"
- }
- else {
- Board_LED_Set(0, false); // Set the LED to the state of "Off"
- }
- }
- return 0 ;
- }
复制代码
译者注:本文翻译自https://community.nxp.com/docs/DOC-334959,感谢soledad做出的贡献。如有错漏,敬请指正。 |