历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-10-14 来源:eefocus

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]); 

推荐阅读

史海拾趣

Gowanda Electronics公司的发展小趣事

对于连续可调直流稳压电源电路,网友可能会有多个方面的问题,以下是一些常见问题及其解答:

一、技术原理与性能参数

  1. 问:连续可调直流稳压电源电路的工作原理是什么?
    : 连续可调直流稳压电源电路的工作原理主要是通过扩展开关电源的电压和电流容量,采用高频调制技术,将输入的交流电转换为直流电,并通过调节电路使输出电压稳定在一个可调范围内。其内部包含整流、滤波、稳压等多个环节,以提供稳定且可调的直流电压输出。

  2. 问:如何选择合适的连续可调直流稳压电源?
    : 选择连续可调直流稳压电源时,需要考虑的主要因素包括所需电压范围、电流容量、稳压精度、纹波噪声、保护功能等。同时,也需要根据应用场景考虑电源的体积、重量、散热性能等因素。

二、使用与维护

  1. 问:在使用过程中,输出电压不稳定怎么办?
    : 如果输出电压不稳定,可以首先检查电源输入电压是否稳定,使用稳压电源或变压器等辅助设备来保持输入电压的稳定。其次,检查输出端电压设置是否正确,确保输出电压值在设定范围内。最后,检查电源输出端负载是否符合规定,避免负载过重或过轻导致输出电压波动。

  2. 问:如何对连续可调直流稳压电源进行日常维护?
    : 日常维护主要包括检查电源输入输出线路的连接是否牢固,清洁电源外壳和散热风扇上的灰尘,以及定期检查电源的工作状态和性能指标。如果发现异常或故障,应及时进行处理或更换损坏的部件。

三、故障排查与解决

  1. 问:电源无法输出电压或电流怎么办?
    : 如果电源无法输出电压或电流,可以首先检查电源输入电压是否正常,电源本身是否损坏。其次,检查电源输出端连接是否正确,是否存在开路或短路的情况。最后,检查电源是否过载或短路,确保电源在正常工作范围内。

  2. 问:电源输出电压波动大怎么办?
    : 输出电压波动大可能是由于电源输入电压不稳定、输出端负载不匹配或存在电磁干扰等原因造成的。解决方法包括稳定输入电压、匹配适当的负载、检查并消除电磁干扰源等。

四、扩展与升级

  1. 问:如何扩展连续可调直流稳压电源的电压和电流范围?
    : 扩展电压和电流范围通常需要根据具体的电源设计来进行。一般来说,可以通过更换更高功率的整流管、滤波电容和稳压元件等方式来提升电源的电压和电流容量。同时,也可以通过增加并联或串联电路的方式来实现电压和电流的分档调节。

  2. 问:如何进行电路的升级和改造?
    : 电路的升级和改造需要根据实际需求和技术能力来进行。在升级过程中,需要注意保持原有电路的稳定性和可靠性,避免引入新的故障点。同时,也需要关注新技术的发展和应用,以便在升级过程中采用更先进、更高效的电路设计方案。

以上是针对连续可调直流稳压电源电路的一些常见问题及其解答。希望这些信息能够对网友有所帮助。

FerriShield公司的发展小趣事

随着技术的成熟和市场的认可,FerriShield开始拓展产品线。公司研发团队不断改进和优化原始的铁磁屏蔽材料,并推出了针对不同应用场景的系列产品。例如,针对智能手机和平板电脑的轻薄型电磁屏蔽膜,以及针对大型数据中心的高效电磁屏蔽板。这些新产品的推出,使得FerriShield的市场份额逐步扩大。

Dialog Semiconductor(戴乐格半导体)公司的发展小趣事

随着物联网市场的快速发展,Dialog Semiconductor积极布局物联网领域。公司推出了一系列物联网相关的产品和解决方案,包括蓝牙和Wi-Fi芯片、传感器等。这些产品和解决方案能够满足物联网设备对低功耗、高可靠性通信的需求,为物联网市场的发展提供了有力支持。Dialog Semiconductor的前瞻性布局使其在物联网市场中占据了重要位置。

Calmos Systems Inc公司的发展小趣事

Calmos Systems Inc公司创立之初,面临着资金短缺、市场竞争激烈的挑战。公司创始人凭借对电子技术的深厚理解和对市场需求的敏锐洞察,带领团队研发出了一款具有创新性的电子产品。然而,由于品牌知名度低,市场推广困难,产品销量一度不佳。为了打开市场,创始人亲自拜访潜在客户,了解他们的需求,不断优化产品功能。经过不懈的努力,产品逐渐赢得了客户的认可,为公司的发展奠定了基础。

FEI Microwave Inc公司的发展小趣事

随着5G技术的商用化,微波通信市场迎来了新的发展机遇。为了满足市场需求,FEI Microwave Inc公司迅速调整研发策略,加大投入力度,成功研发出了一系列针对5G应用的微波通信产品。这些产品以其高性能、高可靠性和高性价比迅速在市场上获得了认可,为FEI Microwave Inc公司赢得了更多的市场份额。

Danaher Corporation公司的发展小趣事

丹纳赫集团起源于1984年,由Steven Rales和Mitchell Rales兄弟二人创立。他们的愿景是建立一个致力于持续改善并提升客户满意度的制造公司。名字“Dana”源自古老的凯尔特语,寓意奔腾不息的精神和不断改善的品质。起初,丹纳赫集团并未直接涉足电子行业,但随着公司的发展,逐渐将业务范围扩展至包括电子设备和技术的领域。

问答坊 | AI 解惑

5.1声道DVD质量样板试机碟

我国首张5.1声道DVD质量样板试机碟由中国音像制品评价制作中心研制成功。  该试机碟采用DOBY AC-3和DTS两种解码方式。其主要内容包括5.1声道的基本概念、声频测试信号和重放系统校准程序、视频测试信号和重放系统校准程序,为该试机碟专 ...…

查看全部问答>

井冈山大学全国电子大赛培训赛体

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 井冈山大学全国电子大赛培训赛体  …

查看全部问答>

EVC XML文件的读写

下载网上的CMarkup类,在EVC下实现了XML文件的写入和读取,可是使用该类在VC6.0下编写的程序生成的xml文件下载到ppc2003中去读取不了,有没有人碰到类似的问题?难道EVC下的程序只能读取通过EVC编写并生成的XML文件吗?…

查看全部问答>

求教wince下nand拷贝的问题

比方说,我现在手头有100个nand要烧wince image(现在假定这100个nand都是完好的,质量perfect的),一种方法是一个一个用jtag烧,虽然笨一点,但肯定有效;但我想用nand拷贝的方式,就是用jtag烧写一个nand,然后用这个nand作为母片,然后克隆剩下的 ...…

查看全部问答>

请问哪位XD有华邦W83L528D芯片的XP驱动和PDF文档? 或者什么型号的笔记本电脑用到这个芯片。

请问哪位XD有华邦W83L528D芯片的XP驱动和PDF文档? 或者什么型号的笔记本电脑用到这个芯片。…

查看全部问答>

网卡芯片(如RTL8019或DM9000A等)有按MAC地址来自动过滤发来的数据包的功能吗?即:目的MAC地址与自已的MAC不相同的包不接收

网卡芯片(如RTL8019或DM9000A等)有按MAC地址来自动过滤发来的数据包的功能吗?即:目的MAC地址与自已的MAC不相同的包不接收。因为如果用单片机来控制网卡芯片,单片机本身速度比较慢内存也比较少,如果什么包都处理有可能来不及,内存也不够。我 ...…

查看全部问答>

教你如何辨别手机电池真伪

机电池的使用寿命是有限的,所以有时候手机还好好的,但电池已经很不经用了,这个时候,买一块新的手机电池就成为必须的了。作为一个手机用户,面对市场上泛滥成灾的假冒伪劣电池该如何选择呢?下面,笔者就教你几招,希望能帮助大家提高对手机电池 ...…

查看全部问答>

有没有比较过IAR与KEIL的编译效率?

                                 代码的效率,大小等。…

查看全部问答>

请教关于485通信的问题

通过485通信,串口调试助手能显示收到了数据,但内容显示不出来,但用超级终端内容就都能显示出来,为什么啊?…

查看全部问答>

C2000课程的PPT(在论坛的资料里有)

C2000课程的PPT 下载链接https://www.eeworld.com.cn/whitepaper/show.php?itemid=546 大家可以有如下来查找课程的PPT 首先,进入活动的主页。 然后关注 参考资料 从中就可以找到对应课程的PPT…

查看全部问答>