微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > LED灯

LED灯

时间:10-02 整理:3721RD 点击:
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 <stdbool.h>

__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("\r\n GPIO Driver example\r\n");

    /* 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安装目录\ ARM\Flash下,在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


围观一下                           

写的较详细,帮顶~~~!

SDK_2.2.1_LPC54114J256.zip这个我怎么再官网找不到呢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top