阿哲
发表于: 2017-7-13 22:40:39 | 显示全部楼层

本文档主要介绍了如何使用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”,然后打开一个新窗口:

pastedImage_1.png

pastedImage_2.png


2.   选择期望的开发板。本例中,我们使用的是LPCXpresso1549开发板,然后单击“Next”。

注意:当选择该开发板时,可以从上图中突出显示的部分看到MCU(器件)会自动选择匹配。如果没有匹配的开发板,则可以从预安装的MCU列表中选择所需的MCU。

pastedImage_3.png


3.   MCUXpresso IDE包含许多项目模板,可以为具体的MCU快速创建正确配置的项目。

这个New Project向导支持两种类型的项目:

●    那些针对LPCOpen库

●    独立项目

在本例中,我们将展示创建LPCOpen-C project的步骤。该选项会创建一个简单的C项目,main()函数由一个累加计数器的无限while(1)循环组成。此外,还将包括代码以来初始化开发板和启用LED。

pastedImage_1 (1).png


4.    选择项目名称,然后单击“Next”。

pastedImage_2 (1).png


5.    在创建基于LPCOpen的项目时,您将看到的第一个选项页面是LPCOpen库选择页面。

必须导入所使用器件的LPCOpen芯片库和可选的LPCOpen Board Library Project,如果还没有这样做,下面的窗口允许导入库。按照以下步骤:

       a.    单击“Import…”,将出现一个新窗口,选择要导入的存档文件。这种情况下,导入的项目包含在archive.zip中。在本例中,选择LPCXpresso1549开发板。单击“Open”。然后单击“Next”。

pastedImage_5.png


b.    只需选择LPCOpen芯片库和LPCOpen开发板库项目。单击“Finish”。

pastedImage_4.png


6.     选择LPCOpen库。单击“Next”。

pastedImage_6.png

7.     选择CMSIS库项目。 MCUXpresso IDE中的CMSIS库选项允许您从要创建的项目中选择要连接的CMSISCORE库(如果有)。对于这种情况,我们选择“None”作为默认值。单击”Next”

注意:在大多数情况下,对于新项目,建议使用LPCOpen而不是CMSIS-CORE库项目。

pastedImage_7.png


8.    启用S​​WO跟踪时钟。单击“Next”。

pastedImage_8.png


9.    启用CRP的链接器支持。单击“Next”。

pastedImage_9.png


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来产生相同的效果。


本例中,我们将使用默认值。

pastedImage_10.png


11.   选择适当的选项后,您可以单击Finish按钮,然后向导将为您创建项目,以及适当的启动代码和简单的main.c文件。

pastedImage_12.png


12.    这时,您应该能够构建和调试此项目。


编写我的第一个项目

LPCOpen芯片库(本例中为lpc_chip_15xx)包含一些LPC外设的驱动程序。对于这些示例,我们将使用GPIO驱动程序。

pastedImage_13.png

LPCOpen开发板库项目(本例中为lpc_board_nxp_lpcxpresso_1549)包含具有软件API函数的文件,它们提供了一些简单的抽象函数,可以交叉用于多个LPCOpen开发板示例。

pastedImage_14.png


board_api.h包含通用的板卡定义,在板卡和器件中交叉共享。所有这些函数都不需要针对特定的电路板实现,但是如果它们被实现,他们应该使用这个API标准。

在使用MCUXpresso和LPCOpen创建一个新项目之后,它创建了一个简单的C项目,该项目初始化开发板,并使用Board_LED_Set功能将LED设置为“On”状态。

pastedImage_15.png


在本例中,我们将使用一个按钮来切换一个LED。在LPCXpresso1549开发板上,LED连接到PIO1.1、PIO0.3和PIO0.25引脚。SW1连接到PIO0.17引脚。

pastedImage_16.png


函数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做出的贡献。如有错漏,敬请指正。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 53 | 回复: 76



手机版|

GMT+8, 2024-4-24 11:14 , Processed in 0.048342 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表