NXP

LED灯

2019-07-12 13:52发布

LED灯

象棋小子    1048272975 嵌入式教程中LED灯以及程序教程中的”Hello world”都有其特殊的意义,意味着入门。此处以LED灯驱动介绍LPC5411x的工程开发流程。

1. 官网资料

从www.nxp.com下载对应的LPC5411x开发资料,主要是芯片用户数据手册以及对应芯片的软件开发包(sdk),选择针对MDK平台,对应芯片为LPC54114J256,下载SDK_2.2.1_LPC54114J256.zip。软件包里包含了芯片驱动,板级应用示例,移植好的第三方软件等等,具有非常重要的参考价值。 万利的LPC5411x开发板使用了板载的调试器,基于LPC11U35芯片,也可以从NXP官网下载对应LPC11U35的调试器固件以及虚拟串口驱动,对应的下载文件为LPC11Uxx-Debug-Probe-VCOM.zip。可以通过按住复位键,连接调试器usb(CN1),把下载文件中的固件firmware.bin替换掉开发板原来的固件,即可实现更新。

2. MDK工程

下载的软件开发包是基于MDK5的,里面的工程例程可以通过MDK5直接打开。sdk包中包含了devices/LPC54114文件夹,该文件夹包含了外设驱动源码、LPC54114的启动代码、链接文件等等,这部分的源码是工程开发的基础,应加入到工程。此处以MDK4介绍LPC5411x开发工程的完整搭建。 a 新建工程,选择Cortex-M4 FPU。 b 按照sdk目录,创建LCP54114、LCP54114/utilities、LCP54114/arm、LCP54114/drivers目录存放sdk源码。其中LPC54114目录存放设备特定配置代码system_LPC54114_cm4.c,LCP54114/utilities目录存放串口调试工具代码fsl_debug_console.c,LCP54114/arm目录存放LPC54114启动代码startup_LPC54114_cm4.s和功耗控制库文件keil_lib_power.lib,LCP54114/drivers目录存放LPC54114芯片外设驱动代码。 c 加入用户代码,创建Apps目录,从sdk中拷贝board.c、clock_config.c、pin_mux.c这三个板级代码到Apps目录。NXP的sdk板级代码中,把板级初始化代码放在board.c,把时钟配置代码放在clock_config.c,把引脚配置代码放在pin_mux.c中。在Apps目录中加入main.c,实现LED灯的闪烁驱动。 main.c的LED闪烁驱动源码如下 #include "board.h" #include "fsl_debug_console.h" #include "fsl_gpio.h"   #include "pin_mux.h" #include   __asm void Delay_ms(unsigned int nCount) { 0               ldr  r1, =24000 // arm clock = 96000000hz 1               subsr1, r1, #1               bne  %B1               subsr0, r0, #1               bne  %B0               bx   lr }   int main(void) {     uint32_tport_state = 0;       /* Define theinit structure for the output LED pin*/    gpio_pin_config_t led_config = {        kGPIO_DigitalOutput, 0,     };       /* Board pin,clock, debug console init */     /* attach 12MHz clock to FLEXCOMM0 (debug console) */    CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);     /* enable clockfor GPIO*/    CLOCK_EnableClock(kCLOCK_Gpio0);    CLOCK_EnableClock(kCLOCK_Gpio1);      BOARD_InitPins();    BOARD_BootClockFROHF96M();    BOARD_InitDebugConsole();       /* Print a noteto terminal. */    PRINTF(" GPIO Driver example ");       /* Init outputLED GPIO. */    GPIO_PinInit(GPIO, 0, 15, &led_config);    GPIO_WritePinOutput(GPIO, 0, 15, 0);    GPIO_PinInit(GPIO, 0, 19, &led_config);    GPIO_WritePinOutput(GPIO, 0, 19, 0);     GPIO_PinInit(GPIO,0, 21, &led_config);    GPIO_WritePinOutput(GPIO, 0, 21, 0);    GPIO_PinInit(GPIO, 0, 22, &led_config);    GPIO_WritePinOutput(GPIO, 0, 22, 0);    GPIO_PinInit(GPIO, 0, 25, &led_config);    GPIO_WritePinOutput(GPIO, 0, 25, 1);     GPIO_PinInit(GPIO,0, 26, &led_config);    GPIO_WritePinOutput(GPIO, 0, 26, 1);    GPIO_PinInit(GPIO, 0, 29, &led_config);    GPIO_WritePinOutput(GPIO, 0, 29, 1);    GPIO_PinInit(GPIO, 0, 30, &led_config);    GPIO_WritePinOutput(GPIO, 0, 30, 1);        while (1) {               GPIO_TogglePinsOutput(GPIO,0, 1u << 15);               GPIO_TogglePinsOutput(GPIO,0, 1u << 21);               GPIO_TogglePinsOutput(GPIO,0, 1u << 25);               GPIO_TogglePinsOutput(GPIO,0, 1u << 29);               Delay_ms(1000);                      GPIO_TogglePinsOutput(GPIO,0, 1u << 19);               GPIO_TogglePinsOutput(GPIO,0, 1u << 22);               GPIO_TogglePinsOutput(GPIO,0, 1u << 26);               GPIO_TogglePinsOutput(GPIO,0, 1u << 30);               Delay_ms(1000);     } } d 工程设置编译完成后用fromelf命令生成二进制可执行代码firmware.bin,LPC5411x在启动时会对用户代码进行校验,只有合法的镜像才会执行,用checksum.exe对MDK编译生成的firmware.bin进行校验和的更正,用于二进制可执行代码的直接烧录。 e 工程设置编译器选项,预定义CPU_LPC54114J256BD64_cm4,用于sdk源码的编译要求,加入头文件定义,用--c99进行编译。 f 工程设置链接器,用LPC54114J256_cm4.scf分散加载文件。 g 工程设置调试器/烧录器,LPC54110开发板板载了CMSIS-DAP调试器。 对CMSIS-DAP Debugger进行设置 代码烧录设置,把LPC5411x_256.FLM烧录文件拷贝到MDK4安装目录 ARMFlash下,在Add选项下选择LPC5411x IAP 256kB Flash,其中LPC5411x_256.FLM为LPC5411x的IAP烧录代码实现,源码可以参考附件。设置好后,可以直接在MDK4下用调试器直接烧录代码。 h 编译,成功后会在工程目录生成可以直接烧录运行的二进制可执行代码firmware.bin。

3. 烧录运行

设置好调试器烧录后,可以用烧录器直接下载代码并运行。 设置成usb启动,连接CN3,LPC5411x的usb通讯口,ISP会虚拟出一个存储设备(LPC5411x内部flash),里面有一个firmware.bin的文件,即为用户程序,可以把firmware.bin文件删除,重新把新的用户程序firmware.bin拷贝到存储设备中。设置成flash启动,重新上电即可运行更新的代码。 设置成串口启动,配合NXP提供的FlashMagic工具,用串口进行代码下载。

4. 附录

此处以MDK4简单介绍LPC5411x工程开发的搭建过程,这对于其他编译集成环境(IAR、GCC等)都是类似的。 附件为基于MDK5的LPC54114J256官方sdk源码包SDK_2.2.1_LPC54114J256.zip,板载调试器官方固件以及串口驱动包LPC11Uxx-Debug-Probe-VCOM.zip,LPC5411x的IAP烧录源码工程以及烧录文件LPC5411x_256.FLM,基于MDK4的LED灯驱动工程,LPC5411x镜像校验码生成工具checksum.exe的win32源码。 https://pan.baidu.com/s/1qXJDMlm