基于usb(免驱)的iap升级

本文介绍了一种通过USB接口实现STM32固件升级的方法。利用自定义HID设备,开发板预装引导加载程序,实现固件的远程更新。文章详细描述了上位机和下位机的开发过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接着我之前的引导程序升级,之前的是简单的设计,并不是通过USB上位机进行下载固件

		区域划分:		
		应用区:为0x8000000~0x000020000
		引导程序区:0x8020000~0x060000
  1. 开发板预先下载引导加载程序,这里由于我的开发板上没有按键,这里我是直接就进入等待USB上位机程序下载固件,将 收到的数据通过 iap_write_appbin(DataBuf,len),(参考正点原子的iap _ write _ appbin,这里如果直接用原子哥的这个肯定不行,必须加以修改,不然无法将完整的数据写入到闪存中)通过写入到内部闪存0x8020000~0x060000这块区域中,下载完成后,即收到了数据USB_Received_Flag置为1,启动iap_load_app(这里USB_SendData(“update stm32 bin ok”,20),有时候没去执行,不知道啥原因,但是应用固件确实是写入到了内部flash)。

这里写图片描述
2. 看效果图:
这里写图片描述
3. 上位机这块,参考我前面的blog中HID上位机部分,主要上位机固件下载函数修改:

        private BinaryReader br;
        /// <summary>
        /// 下载二进制文件
        /// </summary>
        private void DownloadBinFile()
        {
            int length = 0;
            string str = "";
            long lSize = 0;
            Byte[] data = new Byte[64];
            progressBar.Value = progressBar.Minimum;//设置进度条的当前位置为0
            string fileName = textBox1.Text.Trim();
            if (myHid.Opened == false)
            {
                MessageBox.Show("未检测到设备接入,请重新插拔设备再试!!!"
                          , "温馨提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (File.Exists(fileName))
            {
                lSize = new FileInfo(fileName).Length;
            }
            progressBar.Maximum = (int)lSize;
            try
            {
                br = new BinaryReader(new FileStream(fileName,FileMode.Open,FileAccess.Read));
                do
                {

                    if (myHid.Opened == false)
                    {
                        MessageBox.Show("未检测到设备接入,请重新插拔设备再试!!!"
                                  , "温馨提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    Array.Clear(data, 0, data.Length);
                    data = br.ReadBytes(64);
                    length = str.Length;
                    progressBar.Value += data.Length;
                    str = Encoding.Default.GetString(data);
                    Report r = new Report(0, data);
                    myHid.Write(r);
                }
                while (data.Length != 0);
            }
            catch (Exception)
            {
                //MessageBox.Show("    发送文件为空!", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
            }
            progressBar.Value = progressBar.Maximum;
            br.Close();
        }

4 .下位机,其他的参考我之前的下位机部分,具体怎样修改的,有兴趣的私聊我!至此,可以启动bootloader,通过自定义HID设备,实现usb固件升级告一段落了。
usb固件升级小助手:点击下载

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ya土豆儿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值