请教各位大神:stm32 bootloader软件复位后串口接收数据的错误问题!!!

2019-08-17 06:19发布

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的程序共用一个串口造成的???,软解复位后再串口接收冲突???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。