红龙103开发板CAN IAP

CAN IAP

CAN通信

CAN Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。CAN属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。较之许多RS485基于R线构建的分布式控制系统而言,基于CAN总线的分布式控制系统在以下方面具有明显的优越性:

1网络各节点之间的数据通信实时性强 

2缩短了开发周期 

3已形成国际标准的现场总线 

4最有前途的现场总线之一 

stm32CAN控制器

stm32f103zet 属于增强型,拥有个 bxCAN 模块(Basic Extended CAN),即基本扩展 CAN,它支持 CAN 协议 2.0A 和 2.0B,它的设计目标是,以最小的CPU 负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。对于安全紧要的应用,bxCAN 提供所有支持时间触发通信模式所需的硬件功能。bxCAN 主要有如下特点:

1)支持 CAN 协议2.0A 2.0B 主动模式

2)波特率最高可达1Mb/s

3)支持时间触发通信功能

4个发送邮箱

5个两级深度的 个 FIFO

6)可变滤波器组 14 

stm32CAN IAP引导程序

本次CAN IAP使用的是2.0B协议,通信速率200Kbps,分为应用程序编程板和应用程序目标板。

编程板:读取SD卡是否有“Can_Updata.bin”文件,若存在文件,则从CAN总线发送一个“UPDATA”信息,等待目标板返回“OK”信息,后读取文件内容,发送头八个字节即应用程序的MSP和中断向量起始地址,等待目标板返回“BEGIN”信息,接着继续从文件头开始读1024个字节,并通过CAN总线发送给目标板,等待目标板返回“CONTINUE”信号,接着发送1024个字节,直到读到文件尾部,即读出的字符个数小于1024个字节,发送最后读出的字符并发送,后发送“STOP”标记,应用程序发送完成。

目标板:复位开发板读取后备寄存器BKP_DR1==0x55AA是否成立,若成立则等待编程板发送“UPDATA”信息,随后返回“OK”,等待编程板发送一次数据,返回“BEGIN”,开始接收编程板的1024个字节后返回“CONTINUE”,继续接收,当接收到2048个字节后将这2048个字节写入到Flash中,继续等待接收下一个2048个字节,当最后接收到“STOP”信号后,标志应用程序接收完成,将最后接收到的数据写入到Flash中,随后将后备寄存器BKP_DR1=0xAA55,跳转到应用程序中开始执行应用程序。

int main(void)
{   
    uint32_t i,j;
    
    RCC_Configuration(); //初始化系统时钟               
    LED_Init();          //初始化LED         
    User_CAN1Init();     //初始化CAN1 
    User_Uart1Init();    //初始化Uart1                  
 
    printf("\r\nCAN总线下载BootLoader\r\n"); //CAN下载        
    printf("www.openmcu.com\r\n"); //输出欢迎信息测试串口      
    printf("\r\n");                 //输出欢迎信息测试串口   
    printf("后备寄存器状态:%x\r\n",ReadBKP());
    if(ReadBKP()==0x55AA)
    {
        Position=0;
        TotalLen=0;
        printf("\r\n开始更新...\r\n");
        App_Updata ();	 //更新程序
        printf("\r\n更新完成\r\n");
        WriteBKP(0xAA55);
        Jump_App();	 //跳转到应用程序
    }    
    else//否则执行用户程序
    {   
        printf("应用程序入口地址:%x\r\n",(*(__IO uint32_t*)(APP_ADDR_FLASH+4)));
        if (((*(__IO uint32_t*)(APP_ADDR_FLASH+4)) & 0xFF000000 ) == 0x8000000)
        {//判断是否已经下载程序,防止程序跑飞
            Jump_App();	 //跳转到应用程序
        }
        else
        {
            WriteBKP(0x55AA);
              //保证没有用户程序,后备寄存器不为0x55AA,复位后能执行更新
            printf("没有可执行的程序\r\n\n");
        }
        while(1)
        {
            for(i=0;i<30000;i++) 
            {
                 for(j=0;j<300;j++);
             }
             LED_Turn(GPIO_Pin_6);       //闪烁LED表示系统无卡死  
         }
    }
}


CAN IAP应用程序

IAP下的应用程序与普通程序相差不大,其主要有以下几点区别:

1)ROM空间区别,普通程序的ROM空间从0x8000 0000开始,而在IAP下的应用程序的起始地址则是IAP跳转的地址,这里我们的引导程序跳转到应用程序的地址为0x801 0000,因此设置ROM空间为0x801 0000,如下图

 

2)中断向量表,普通程序若是从Flash启动,则中断向量表的偏移地址为0,而在IAP的应用程序中需要设置新的中断向量表,偏移地址即IAP程序存放的地址与应到程序的地址偏移即0x801 0000-0x800 0000,在程序中做如下设置SCB->VTOR = FLASH_BASE | 0x10000;//设置中断偏移

3)更新设置,当我们需要对应用程序进行更新时,而我们由于目标板的距离相对较远的情况下,使用传统的方法进行复位后更新是不太可能的,因此需要在应用程序中进行软件复位,本程序中使用的是CAN IAP,因此在应用程序中对CAN进行了配置,以便随时更新,当发送机发送“UPDATA”信号给目标板时,目标板进入中断,同时将后备寄存器BKP_DR1设置为0x55AA,并产生软件复位,复位后系统进入引导程序,判断BKP_DR1=0x55AA,因此开始执行更新。这里贴出CAN中断代码如下:

void CAN1_RX0_ISR(void)
{
    if(CAN_GetITStatus(CAN1,CAN_IT_FMP0)!= RESET)
    {
        CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);         //清除中断标志                  
        CAN_Receive(CAN1,CAN_FIFO0,&RxMessage);           //读取数据    
        if(RxMessage.Data[0]=='U'&&RxMessage.Data[1]=='P'&&RxMessage.Data[2]=='D'&&RxMessage.Data[3]=='A'&&RxMessage.Data[4]=='T'&&RxMessage.Data[5]=='A')
        {
            WriteBKP(0x55AA);	 //设置后备寄存器
            __set_FAULTMASK(1);	//关闭所有中断
            NVIC_SystemReset();	 //进行软件复位
       }
    }
}


4.5CAN IAP实验现象

本次实验下载CAN IAP引导程序到目标板,将发送程序下载到编程板,将编译好的应用程序“系统定时器”更名为“Can_Updata.bin”放入2G SD卡更目录下,用串口线将电脑与目标板的串口1相连,并设置波特率为115200,开启目标板,如图1是我们已经下载了应用程序,因此直接执行。下面对编程板进行复位,开始执行更新,更新完成后出现串口输出如图2内容。

图1 开发板内下载了程序直接运行

 

程序执行更新

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gd32f103开发板是一款基于GD32F103系列微控制器的开发板,广泛用于嵌入式系统开发和学习。该开发板提供了丰富的软硬件资源,方便开发者进行各种实验和项目开发。 首先,gd32f103开发板采用了gd32f103微控制器,该微控制器是一款基于ARM Cortex-M3内核的高性能单片机,具有优秀的计算和存储能力。它运行速度快、功耗低,可以满足各种嵌入式系统的需求。同时,gd32f103还支持丰富的外设接口,如多个UART串口、SPI接口、I2C接口等,方便与外部设备进行通信。 其次,gd32f103开发板上还集成了一系列常用的硬件资源,例如LED灯、按键、LCD屏等。这些硬件资源可以直接使用,方便开发者进行开发和调试。此外,gd32f103开发板还具有丰富的扩展接口,如GPIO接口、ADC接口、定时器接口等,可以方便地连接其他外部模块和设备。 最后,gd32f103开发板还提供了完整的软件开发工具链和支持资料。开发者可以使用官方提供的开发环境和软件库进行程序开发,还可以参考官方提供的技术文档、例程和用户手册等资料进行学习和开发。这些资料丰富全面,对于初学者和有经验的开发者来说都非常有帮助。 总之,gd32f103开发板是一款功能强大、资源丰富的开发板,适用于嵌入式系统开发和学习。它的高性能微控制器、丰富的硬件资源和完整的软件开发工具链,能够满足开发者各种需求,帮助他们快速开发出高质量的嵌入式系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值