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

为什么建设银行网站打不开wordpress下载插件

为什么建设银行网站打不开,wordpress下载插件,做公司官网要服务器吗,wordpress怎样上传前言 这周一直想做一个IAP固件升级的上位机,然后把升级流程全都搞懂 有纰漏请指出,转载请说明。 学习交流请发邮件 1280253714qq.com IAP原理 IAP的原理我就不多赘述了,这里贴上几位大佬的文章 STM32CubeIDE IAP原理讲解,及U…

前言

这周一直想做一个IAP固件升级的上位机,然后把升级流程全都搞懂

有纰漏请指出,转载请说明。

学习交流请发邮件 1280253714@qq.com

IAP原理

IAP的原理我就不多赘述了,这里贴上几位大佬的文章

STM32CubeIDE IAP原理讲解,及UART双APP交替升级IAP实现-CSDN博客

STM32 IAP升级固件 + 上位机 例程 | 码农家园

IAR环境下STM32+IAP方案的实现

之前做过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*fwPackLength+1,fwPackLength);fwPackIndex++;serialPort->write(fwSendBuff);if(fwPackIndex>fwPackNum){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(fwPackIndex>=fwPackNum){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_H

iap.c

#include "includes.h"IAP_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_ADDR+stIap.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_ADDR+4));__set_MSP(*(__IO u32*)(__APP_START_ADDR));SCB->VTOR = __APP_START_ADDR;application();	
}

视频演示

IAP固件升级(Qt上位机)最初版0923_哔哩哔哩_bilibili

IAP固件升级(Qt上位机)最初版0923

http://www.yayakq.cn/news/616777/

相关文章:

  • vi毕业设计代做网站外贸网站模板建立
  • 大型网站建设托管服务太原网站建设方案托管
  • 极速网站建设定制费用国内优秀网页设计案例
  • 深圳网站开发一薇浙江网站建设公司电话
  • 做app网站的软件有哪些内容吗不买域名怎么做网站
  • 酒店网站开发需求是企业写的吗宝安中心医院怎么样
  • 门户网站的功能北京企业网站制作
  • 学院后勤处网站建设方案书网站子站怎么做的
  • 育儿哪个网站做的好淘宝指数转换
  • 铁岭做网站包括哪些商标注册证查询官网
  • 顺德网站建公司官网包括什么内容
  • 食品网站的建设背景公关就是陪人睡觉吗
  • 石家庄公司网站如何制作深圳华强北招聘网
  • 小说网站建设教程网页论坛怎么实现
  • python可以做网站吗安徽省工程造价信息网
  • 怎么调查建设网站特价网站建设价格
  • 网站缓存实例必要 网站
  • 网站建设的经验flash可以做网站吗
  • 网页站点文件夹如何做淘外网站推广
  • 附近网站建设服务公司soho 网站建设
  • 还有用的网站做企业内刊有哪些网站推荐
  • 创建网站用突唯阿做响应式网站做网站用什么颜色好
  • 洛阳东翔科技做的网站企石做网站
  • 如何分析对手网站关键词应用下载app
  • 在线做高中试卷的网站广元专业高端网站建设
  • 装修企业网站源码王磊网络网站建设
  • 网站开发实训周报微信小程序是怎么做出来的
  • 重庆网站制作济南做宣传册网站
  • 申请网站空间就是申请域名商城网站一般建设的宽度
  • 网站 稳定性wordpress英文下主题怎么换