Bootloader流程: APP程序内通过通讯协议接收上位机程序更新命令:0x01,;收到0x01后单片机给上位机返回0x01,证明上位机和下位机连接成功,准备复位;复位后再bootloader程序内检查bootloader更新标志,如果成立则进行程序更新。不成立则跳转到APP内运行。1. APP内通讯协议:0x01程序更新命令,收到后给上位机发送连接成功,写flashbootloader更新标志,并软件复位。代码如下:case 0x01: // 程序更新命令 { Flash_Write(addr_bootloader,flag_bootloader); if(flag_bootloader==Flash_flagboot_read(addr_bootloader)) { delay_ms(2000); sendbootloader(0x02); // 串口连接成功,准备复位 //USART_ITConfig(USART1, USART_IT_RXNE,DISABLE); SoftReset(); // 软件复位 } }break;2. 软件复位后更具读取的flag_bootloader标志如果成立,则进行程序更新,不成立跳转到APP程序。if(flag_bootloader==Flash_flagboot_read(addr_bootloader)) // addr_bootloader地址0x0800FFF6 { if( flag_reset==1) { delay_ms(2000); sendbootloader(0x04,0x02); //单片机已复位,准备进行程序擦出 delay_ms(2000); if(!Flashclearall(FLASH_APP1_ADDR)) // 从0x08010000 出开始擦出 delay_ms(2000); sendbootloader(0x04,0x03); // 程序已擦出,准备更新程序 flag_reset=0; }但是当上位机发送过来更新的数据后,数据接收存在问题,如下所示:上位机发送:CDFA040528F00E0020CD010108994801087706010895480108090301089B4F0108000000009524DC串口接收:(从第四个数据开始一直是0x04…)CDFA04040404040404040404040404040040404040400404040404...但是我在软件复位之前发送上述数据,串口接收的数据是正确的。 我怀疑是不是APP程序和bootloader的程序共用一个串口造成的???,软解复位后再串口接收冲突???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>