2017年7月13日星期四

如何使用MCUXpresso IDE和LPCOpen库创建一个新项目

本文档主要介绍了如何使用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.    启用S​​WO跟踪时钟。单击“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状态)。
  1. /*
  2. ===============================================================================
  3. Name        : LPCXpresso_new_example.c
  4. Author      : $(author)
  5. Version     :
  6. Copyright   : $(copyright)
  7. Description : main definition
  8. ===============================================================================
  9. */

  10. #if defined (__USE_LPCOPEN)
  11. #if defined(NO_BOARD_LIB)
  12. #include "chip.h"
  13. #else
  14. #include "board.h"
  15. #endif
  16. #endif

  17. #include <cr_section_macros.h>


  18. int main(void) {
  19.         bool State_Input;
  20. #if defined (__USE_LPCOPEN)
  21.        // Read clock settings and update SystemCoreClock variable
  22.        SystemCoreClockUpdate();
  23. #if !defined(NO_BOARD_LIB)
  24.        // Set up and initialize all required blocks and
  25.        // functions related to the board hardware
  26.        Board_Init();
  27.        Chip_GPIO_SetPinDIRInput(LPC_GPIO, 0, 17); //Set GPIO direction for a single GPIO pin to an input

  28. #endif
  29. #endif

  30.        while(1) {
  31.                State_Input=  Chip_GPIO_GetPinState (LPC_GPIO, 0, 17);  //Get a GPIO pin state via the GPIO byte register
  32.                if (State_Input==0){
  33.                       Board_LED_Set(0, true); // Set the LED to the state of "On"
  34.                }
  35.                else  {
  36.                       Board_LED_Set(0, false); // Set the LED to the state of "Off"
  37.                }
  38.        }
  39.        return 0 ;
  40. }
复制代码

译者注:本文翻译自https://community.nxp.com/docs/DOC-334959,感谢soledad做出的贡献。如有错漏,敬请指正。

更多详情内容请参考:https://www.yiboard.com/thread-734-1-1.html

没有评论:

发表评论