历史上的今天

今天是:2024年10月14日(星期一)

正在发生

2019年10月14日 | LPC1768单片机串口IAP升级实例源码

发布者:才富五车330 来源: eefocus关键字:LPC1768  单片机  串口  IAP升级 手机看文章 扫描二维码
随时随地手机看文章

LPC1768 IAP升级方法 实例  

测试说明:

    本实验通过串口0对开发板进行IAP升级,本工程为引导程序,将开发板上的USB转串口连接到电脑

    插上3.2寸彩屏模块,下载程序到开发板,彩屏显示按键功能:

    INTO键:擦除应用程序

    方向键 ok:进行IAP升级,等待串口接收应用程序

    方向键 down:运行应用程序

    方向键 up:显示菜单

    

    当按下ok键等待串口接收应用程序时,电脑通过超级终端发送预先编译好的应用程序(BIN)格式

    以1K Xmodem模式进行发送给开发板,开发板接收完成后显示 Updata Complete,按方向键down

    开始执行应用程序


单片机源程序如下:

/*******************************************************************************

  * Company: Wang Electronic Technology Co., Ltd.

  ******************************************************************************

  * 文件名称:main.c

  * 功能说明:IAP引导程序

  * 版    本:V1.1

        * 作    者:jeansonm

********************************************************************************

  * 文件名称:

  * 功能说明:

  * 版    本:

        * 更新作者:        

  * 日    期:

        * 更新原因:

********************************************************************************/

#include "LPC17xx.h"

#include "lcd_bsp.h"

#include "xmodem1k.h"

#include "iap.h"

#include


#define        IMG_START_SECTOR        0x00010000        /* Sector 16 应用程序地址 */

#define        IMG_END_SECTOR                0x00037FFF        /* Sector 20 */



/*        Function Prototype */

static uint32_t load_image(uint8_t *data, uint16_t length);


/*        Character array workspace for GLCD print functions */

#define MAX_STRING_SIZE                50

static uint8_t string[3][MAX_STRING_SIZE];

static uint32_t received_data = 0;


/*        State-machine variable to control application functionality */

enum state_machine {

        READY = 0,

        MENU,

        ERASE_FLASH,

        FLASH_IMG,

        SHOW

};

enum state_machine         cmd;


/*********************************************************************************************************

** Function name:       JMP_Boot

** Descriptions:        跳转到应用程序

** input parameters:    address 应用程序地址

** output parameters:   无

** Returned value:      无

*********************************************************************************************************/

__asm void JMP_Boot( uint32_t address ){

   LDR SP, [R0]                ;Load new stack pointer address

   LDR PC, [R0, #4]        ;Load new program counter address

}


/*********************************************************************************************************

** Function name:       Boot

** Descriptions:        跳转到应用程序

** input parameters:    无

** output parameters:   无

** Returned value:      无

*********************************************************************************************************/

void Boot( void )

{

        SCB->VTOR = IMG_START_SECTOR & 0x1FFFFF80;        //修改中断向量表

        JMP_Boot(IMG_START_SECTOR);

}


/*********************************************************************************************************

** Function name:       Screen_Fresh

** Descriptions:        刷新显示

** input parameters:    p 显示信息

** output parameters:   无

** Returned value:      无

*********************************************************************************************************/

void Screen_Fresh(char *p)

{

        LCD_Clear(Black);

        LCD_DisplayString(0, 0,          "Application MENU");

        LCD_DisplayString(0, 16,          "Press "INT0" to erase image");

        LCD_DisplayString(0, 16*2, "Press "UP" to print menu");

        LCD_DisplayString(0, 16*3, "Press "CENTER" to transfer image");

        LCD_DisplayString(0, 16*4, "Press "DOWN" to display image");

        LCD_DisplayString(0, 16*5, string[0]);

        LCD_DisplayString(0, 16*6, string[1]);

        LCD_DisplayString(0, 16*7, string[2]);

        LCD_DisplayString(0, 16*9, p);

}

int main(void)

{

        uint32_t ints[4];


        SystemClockUpdate();


        LCD_BSP_Init();                                //LCD初始化

        LCD_Clear(Black);

        LCD_SetBackColor(Black);

        LCD_SetTextColor(White);


        cmd = MENU;

        while(1)

        {                

                switch(cmd)

                {

                        case READY:                                

                                if                (!(LPC_GPIO2->FIOPIN & (1<<10)))/*        INT0 键 */

                                {

                                        Screen_Fresh("Erasing Images...");

                                        cmd = ERASE_FLASH;                                                

                                }

                                else if(!(LPC_GPIO1->FIOPIN & (1<<29)))/*        方向键 up 键 */

                                {

                                        cmd = MENU;                                

                                }

                                else if(!(LPC_GPIO1->FIOPIN & (1<<25)))/*        方向键 ok 键 */

                                {

                                        Screen_Fresh("Waiting for XMODEM Xfer...");

                                        cmd = FLASH_IMG;

                                }

                                else if(!(LPC_GPIO1->FIOPIN & (1<<26)))/*        方向键 down 键 */

                                {

                                        Screen_Fresh("Execute program");

                                        cmd = SHOW;

                                }

                                break;


                        case MENU:                                

                                /*        显示引导程序版本 */

                                if(u32IAP_ReadBootVersion (&ints[0], &ints[1]) == IAP_STA_CMD_SUCCESS)

                                {

                                        snprintf((char *)string[0], MAX_STRING_SIZE, "Boot Code version %d.%d", ints[0], ints[1]); 

[1] [2]
关键字:LPC1768  单片机  串口  IAP升级 引用地址:LPC1768单片机串口IAP升级实例源码

上一篇:S32K144_Uart串口源程序
下一篇:LPC1768 IAP升级方法

推荐阅读

Tiny4412所用的芯片是DDR3,虽然和前面介绍的Tiny4412裸机程序之DDR工作原理与时序(二) 很多原理是一致的,这里还是就DDR3再详细的介绍一下,这一节的内容也基本来自于网络。一、内存工作流程首先,我们先了解一下内存的大体结构工作流程,这样会比较容量理解这些参数在其中所起到的作用。这部分的讲述运用DDR3的简化时序图DDR3的内部是一个存储阵列,将数...
  震网病毒又名Stuxnet病毒,是一个席卷全球工业界的病毒。震网(Stuxnet)病毒于2010年6月首次被检测出来,是第一个专门定向攻击真实世界中基础(能源)设施的“蠕虫”病毒,比如核电站,水坝,国家电网。互联网安全专家对此表示担心。作为世界上首个网络“超级破坏性武器”,Stuxnet的计算机病毒已经感染了全球超过 45000个网络,伊朗遭到的攻击最为...
基于STC15F101W调光灯,按键状态机,电脑USB供电,STC15F101W单片机驱动单片机源程序如下:/**********************************************程序名:LED程序产品代号:LED调光台灯硬件平台:STC15F100W (只有T0和T2两个定时器 )当前版本:1.0编写人:@Richard说明: ①适用于Led驱动板 ②可通...
1. PWM概述定时器0、1、2和3具有PWM功能。TCNTBn是计数初值,定时器开启后,减1计数。TCMPBn的值是用于比较的,初始值是0,所以TCNTBn减1计数到0时,就等于TCMPBn,此时TOUTn就会翻转。所以,TCMPBn的值是用于脉宽调制PWM的,即当递减计数器(确切说是TCNTn)的值与定时器控制逻辑中的比较寄存器的值(确切说是TCMPn)相等时,控制逻辑改变输出电平。TOUT...

史海拾趣

问答坊 | AI 解惑

电子书《毕业我们一起失恋》

电子书《毕业我们一起失恋》…

查看全部问答∨

帮我看看``有什么问题

这是我做的“短距离GFSK无线调制器”  但貌似电路连线上有点问题  请高手帮忙看看  图我放附件里    谢谢    图太大了只能截主要部分的 “1602部分”“51单片机部分”“ADF7012部分”  主要就是 ...…

查看全部问答∨

软件滤波方法及程序

本帖最后由 paulhyde 于 2014-9-15 03:03 编辑 10种软件滤波方法,以及整理好的对应的程序源代码~~ 很有用的~    …

查看全部问答∨

关于一个变量的定义

Uint16 *souraddr; souraddr =  (Uint16 *)0x400000; 在程序里面有这样的变量定义 souraddr是16位地址的,可0x400000 是24位,可以赋值么? …

查看全部问答∨

PB5.0,编译出现错误:error C2220: warning treated as error - no object file generated

平台:PB5.0         小弟做一个内核时候,在build阶段出现一个错误,具体如下: BUILD: [00:0000000029:PROGC ] Compiling \\WINCE500\\PLATFORM\\855gme\\Src\\Kernel\\Libs\\Kitl\\ directory. BUILD: [01:000 ...…

查看全部问答∨

推荐个,嵌入式招聘求职的专业网站:中华嵌入式人才库

中华嵌入式人才库简介      中华嵌入式人才库隶属于中国嵌入式系统产业联盟,是面向中国嵌入式行业的专业人力资源服务网站,为IT企业提供嵌入式人才,为个人提供求职应聘机会,为业内资深人员提供技术交流的平台以及专业服务 ...…

查看全部问答∨

请问DNS的解析速率正常范围是多少啊?是不是太高或太低都不好啊?

提这个问题是因为需要监控DNS解析速率这个指标,并设定其上下限门限值。所以请有经验的兄弟们给个解析速率的上下限经验值哈。谢谢!…

查看全部问答∨

下载wdk

现在在connect.microsoft.com 上还可以下载wdk吗?我在微软新闻组上好多人都说可以,也有人说找不到,有谁知道在哪的?thank you.…

查看全部问答∨

嵌入式WEB服务器及远程测控应用详解

RT [ 本帖最后由 wanghongyang 于 2010-12-30 14:51 编辑 ]…

查看全部问答∨

请问一下STM32F10x哪些I/O是CMOS,哪些是TTL?

我从数据手册“STM32F101x8xB_V10.pdf”中看到的输入输出有TTL电平和CMOS电平的,见图片。请问一下STM32F10x哪些I/O是CMOS,哪些是TTL?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved