当前位置: 首页 > news >正文

苏州市市政建设集团公司网站中国建设银行官方网站纪念币预约

苏州市市政建设集团公司网站,中国建设银行官方网站纪念币预约,外贸公司都是在什么网站做推广,做服装加工哪个网站比较好前言 这周一直想做一个IAP固件升级的上位机#xff0c;然后把升级流程全都搞懂 有纰漏请指出#xff0c;转载请说明。 学习交流请发邮件 1280253714qq.com IAP原理 IAP的原理我就不多赘述了#xff0c;这里贴上几位大佬的文章 STM32CubeIDE IAP原理讲解#xff0c;及U…前言 这周一直想做一个IAP固件升级的上位机然后把升级流程全都搞懂 有纰漏请指出转载请说明。 学习交流请发邮件 1280253714qq.com IAP原理 IAP的原理我就不多赘述了这里贴上几位大佬的文章 STM32CubeIDE IAP原理讲解及UART双APP交替升级IAP实现-CSDN博客 STM32 IAP升级固件 上位机 例程 | 码农家园 IAR环境下STM32IAP方案的实现 之前做过IAP也讲解了一些存在的问题参考之前我写的博客 单片机IAP升级的一些问题与经验_iap更新_TianYaKe-天涯客的博客-CSDN博客 Qt读取二进制文件 读取二进制文件将内容放在binRawData里 void MainWindow::readFw() {QFileDialog dlg(this);QString fileName dlg.getOpenFileName(this, tr(Open), ./, tr(Bin File(*.bin)));if( fileName ){return;}QFile file(fileName);QFileInfo fileInfo(fileName);fwFileLen fileInfo.size();fwPackNum fwFileLen/fwPackLength 1;if(file.open(QIODevice::ReadOnly)){binRawData file.readAll();ui-lineEdit_fwUpdateFile-setText(fileName);ui-textEdit_fwUpdateFile-append(binRawData.toHex());file.close();ui-pushButton_startFwUpdate-setEnabled(true);ui-pushButton_stopFwUpdate-setEnabled(false);}else{QMessageBox::warning(this, tr(Error), tr(Fail to open file!));} } 将binRawData拆包并调用串口发送 connect(fwUpdateTimer,QTimer::timeout,[](){if(fwUpdateState 1){QByteArray fwSendBuff binRawData.mid(fwPackIndex*fwPackLength1,fwPackLength);fwPackIndex;serialPort-write(fwSendBuff);if(fwPackIndexfwPackNum){fwUpdateTimer-stop();fwUpdateState 3;}}});加上固件传输的协议 发送开始指令发送固件包大小 void MainWindow::startFwUpdate() {ui-pushButton_startFwUpdate-setEnabled(false);ui-pushButton_stopFwUpdate-setEnabled(true);fwUpdateState fwStart;QByteArray startCmd;uchar startCmd1 0xAB;uchar startCmd2 0xf0;startCmd loadTxMsg(startCmd1, startCmd2, startCmd);serialPort-write(startCmd);delay_ms(1000);uchar cmd1 0xAB;uchar cmd2 0xf1;uchar uData[2];uint16_t u16FwPackNum fwPackNum;*(uint16_t *)uData[0] *(uint16_t *)u16FwPackNum;QByteArray txFwData;txFwData.append(uData[0]);txFwData.append(uData[1]);txFwData loadTxMsg(cmd1, cmd2, txFwData);serialPort-write(txFwData);fwUpdateTimer-start(100); } 通过定时器逐帧传输传输结束后发送结束信号 connect(fwUpdateTimer,QTimer::timeout,[](){if(fwUpdateState fwStart){QByteArray fwSendBuff binRawData.mid(fwPackIndex*fwPackLength,fwPackLength);fwSendBuff.insert(0,fwSendBuff.length());QByteArray fwSendProtocolBuff loadFwPackData(fwSendBuff);serialPort-write(fwSendProtocolBuff);fwPackIndex;QString fwDataString ByteArrayToHexString(fwSendProtocolBuff).toLatin1();ui-textEdit_fwInfo-clear();ui-textEdit_fwInfo-setWordWrapMode(QTextOption::WordWrap);ui-textEdit_fwInfo-insertPlainText(QString([));ui-textEdit_fwInfo-insertPlainText(QString::number(fwPackIndex));ui-textEdit_fwInfo-insertPlainText(QString(] ));ui-textEdit_fwInfo-insertPlainText(fwDataString);if(fwPackIndexfwPackNum){fwUpdateState fwComplete;fwUpdateTimer-stop();QByteArray stopCmd;uchar stopCmd1 0xAB;uchar stopCmd2 0xf3;stopCmd loadTxMsg(stopCmd1, stopCmd2, stopCmd);serialPort-write(stopCmd);}}}); STM32代码部分 iap.h #ifndef __IAP_H #define __IAP_H#include includes.h#define __APP_START_ADDR 0x08010000U #define __APP_SIZE 0x10000Utypedef enum {IAP_START,IAP_TRANFER,IAP_COMPLETE, } IAP_Status;typedef struct {u8 u8Length; // 当前接受到数据帧的帧长u8 u8Data[64]; // 当前接受到的数据 } RcvFrame_S;typedef struct {IAP_Status state; // ipa升级当前状态RcvFrame_S stRcvFrame; // 接受到的数据u16 u16FwFrameNum; // 固件数据帧总量u16 u16FwFrameIndex; // 固件数据帧偏移u32 u32WriteAddrIndex; // 写地址偏移 } IAP_S;extern IAP_S stIap; void IapRcvDataProc(u8 *MsgData); typedef void (*Application)(void); void JumpToApplication(void); #endif //__IAP_Hiap.c #include includes.hIAP_S stIap;void IapRcvDataProc(u8 *MsgData) {u8 cmd MsgData[3];u8 i 0;switch(cmd){case 0xF1:EraseFwSpace(__APP_START_ADDR,__APP_SIZE/__FLASH_PAGE_SIZE);memcpy(stIap.u16FwFrameNum, MsgData[4], 2);break;case 0xF2:stIap.u16FwFrameIndex;stIap.stRcvFrame.u8Length MsgData[6]; memcpy(stIap.stRcvFrame.u8Data, MsgData[7], stIap.stRcvFrame.u8Length);for(i 0; i stIap.stRcvFrame.u8Length; i 4) //一次写入是4个字节{FlashWriteWord(__APP_START_ADDRstIap.u32WriteAddrIndex, *(u32 *)stIap.stRcvFrame.u8Data[i]);stIap.u32WriteAddrIndex 4; //写入的地址加4} break;case 0xF3:JumpToApplication();}}void JumpToApplication(void) { Application application;__set_FAULTMASK (1);application (Application)(*(__IO u32*)(__APP_START_ADDR4));__set_MSP(*(__IO u32*)(__APP_START_ADDR));SCB-VTOR __APP_START_ADDR;application(); } 视频演示 IAP固件升级Qt上位机最初版0923_哔哩哔哩_bilibili IAP固件升级Qt上位机最初版0923
http://www.w-s-a.com/news/452412/

相关文章:

  • 广州建站商城南阳高质量建设大城市网站
  • 网站建设合同封面模板做代炼的网站
  • 外贸网站建站要多少钱南昌优化排名推广
  • 做公司网站的尺寸一般是多大企业管理网站
  • 苏州网站设计公司兴田德润i简介做签证宾馆订单用啥网站
  • 网站页面设计工具做网站租空间
  • 做智能网站系统百度提交入口
  • 网站建设代理商电话网站规划和建设方案
  • 双桥区网站制作seo 首页
  • 电子商务网站建设前期准备wordpress域名指向二级目录
  • 汕头建站网站模板淮北做网站电话
  • 手机做logo用什么网站服务器安全防护
  • 课程分销的网站怎么做北京企业网站建设方案
  • 吴兴区建设局网站湖北企业网站建设
  • 网页与网站的区别是什么2023年8月份新冠
  • 唐山网站建设外包公司安卓手机怎么搭建网页
  • 国内做网站最大的公司计量检测网站平台建设方案
  • 重庆沛宣网站建设网页制作初学者
  • php网站漂浮广告代码网络营销跟网站推广有啥区别
  • wordpress调用图片优化型网站建设的基本要求
  • 郑州模板网站建设策划公司做网站怎么赚钱滑县电
  • 东昌府聊城网站优化秦皇岛市妇幼保健院
  • 做网站能赚钱吗网页升级访问通知天天更新
  • 做网站使用什么软件的免费招聘网
  • 宁波网站建设公司推荐哪家淄博网站制作公司服务
  • 做网站网页挣钱不免费主题wordpress
  • 如何提高你的网站的粘性手机网站整站模板下载
  • 学校网站建设制度网站相关推荐怎么做
  • 昌图网站wordpress 视频外链
  • 企业网站要怎么建设重庆住房城乡建设部网站