怎么通过usb直接将程序下载到stm32f407?

我是小吕啊 2014-03-13 06:29:00
现在的程序是用ULINK下载进去的
不过老师要求直接用usb将程序要求直接下载到芯片里。
希望各位大神能提供一些思路,在下不甚感激。
...全文
2847 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Simality 2014-06-06
  • 打赏
  • 举报
回复
引用 14 楼 haolvshiqi 的回复:
真心感谢,但是经过摸索,发现DFU需要用一个按钮来进入USB的bootloader,所以开始从相关协议和驱动开始来实现了。
Well actually the hardest part is the other way around. 要从app进bootloader很简单。每次复位之后都是由bootloader引导的,那个按钮只是bootloader里面写的一段通用代码罢了,用一个GPIO的电平作为判断条件。你可以改代码把它换成其它的东西,记住这一点。 如果程序已经引导进入app了,现在你想在app里面通过软件回到bootloader去升级固件。首先bootloader里面有段现成的software reset代码可以复制到你的app里面实现软件复位。 其次复位之后RAM数据都没了,你要考虑bootloader怎么判断你是希望刷固件还是希望直接进app。这个时候你可以考虑利用STM32 flash中的option byte来传递状态。只用1bit就行了。比如0代表不需要更新固件,1代表需要更新。那么你从app里面软复位的时候把这个bit置1。bootloader引导进入条件判断分支的时候就先把这个bit清0,再停留在bootloader里面等待上位机发固件过来。 但是你用什么东西去刷固件就是上位机软件的活了。DFUSe上面有个按钮你点了就会推出DFU模式开始执行app。要想自动化,就得在上位机上面把这个操作给写了。就这样。
我是小吕啊 2014-05-31
  • 打赏
  • 举报
回复
引用 13 楼 Alex_rcpilot 的回复:
引用 9 楼 haolvshiqi 的回复:
[quote=引用 8 楼 liqinghan 的回复:] 个人感觉升级无非就是把存放APP的Flash的地方擦除,然后再把新的程序擦写到那块 区域里面。至于利用USB,(在0x0800 0000)设置一个升级程序,改程序可以实现USB HID功能,然后可以利用USB HID通信(可以自己做个上位机,应该很简单,自己定一些协议)从上位机把bin文件发送给下位机,然后擦除掉存放APP的Flash区,并把APP的bin文件写入到Flash区域,完毕以后,可调到APP运行即可
请问ST公司有没有stm32f407 usb bootloader的源代码呢?我找了半天就找到一个DfuSe
另: MDK4.35以上好像剥离了自带的库,这时候需要你需要下载F1系列USB标准固件库(你不知道我为了在官网找这个地址掉了多少斤肉,妈蛋ST官网能不能再凌乱一点) http://stm32.eeelec.com/zip/stm32_usb-fs-device_lib.zip 可能还用得上UM0121STM32F105/7, STM32F2 and STM32F4 USB on-the-go Host and device library UM0412DfuSe USB device firmware upgrade STMicroelectronics extension: contains the demo GUI, debugging GUI, all sources files and the protocol layer[/quote]真心感谢,但是经过摸索,发现DFU需要用一个按钮来进入USB的bootloader,所以开始从相关协议和驱动开始来实现了。
Simality 2014-04-13
  • 打赏
  • 举报
回复
引用 9 楼 haolvshiqi 的回复:
引用 8 楼 liqinghan 的回复:
个人感觉升级无非就是把存放APP的Flash的地方擦除,然后再把新的程序擦写到那块 区域里面。至于利用USB,(在0x0800 0000)设置一个升级程序,改程序可以实现USB HID功能,然后可以利用USB HID通信(可以自己做个上位机,应该很简单,自己定一些协议)从上位机把bin文件发送给下位机,然后擦除掉存放APP的Flash区,并把APP的bin文件写入到Flash区域,完毕以后,可调到APP运行即可
请问ST公司有没有stm32f407 usb bootloader的源代码呢?我找了半天就找到一个DfuSe
另: MDK4.35以上好像剥离了自带的库,这时候需要你需要下载F1系列USB标准固件库(你不知道我为了在官网找这个地址掉了多少斤肉,妈蛋ST官网能不能再凌乱一点) http://stm32.eeelec.com/zip/stm32_usb-fs-device_lib.zip 可能还用得上UM0121STM32F105/7, STM32F2 and STM32F4 USB on-the-go Host and device library UM0412DfuSe USB device firmware upgrade STMicroelectronics extension: contains the demo GUI, debugging GUI, all sources files and the protocol layer
Simality 2014-04-13
  • 打赏
  • 举报
回复
引用 9 楼 haolvshiqi 的回复:
引用 8 楼 liqinghan 的回复:
个人感觉升级无非就是把存放APP的Flash的地方擦除,然后再把新的程序擦写到那块 区域里面。至于利用USB,(在0x0800 0000)设置一个升级程序,改程序可以实现USB HID功能,然后可以利用USB HID通信(可以自己做个上位机,应该很简单,自己定一些协议)从上位机把bin文件发送给下位机,然后擦除掉存放APP的Flash区,并把APP的bin文件写入到Flash区域,完毕以后,可调到APP运行即可
请问ST公司有没有stm32f407 usb bootloader的源代码呢?我找了半天就找到一个DfuSe
用MDK4.20或以下版本,在安装后到这里: 安装目录\ARM\Examples\ST\STM32F10xUSBLib\Demos\Device_Firmware_Upgrade 可以找到USB DFU的固件范例。当然这个是F1系列的。你用F4系列只需要移植即可。ST没必要为每个系列都出一套范例。 这套固件就是配合DFUSe使用的。 提醒一下,如果你要做产品,想更改DFU模式下的VID、PID或者Windows设备管理器中的显示名称,那么你得透过ST指定的代理申请一个证书。ST好像有个算号器可以根据你的VID、PID算出一串16进制码。更新固件里的VID、PID信息,同时把这些信息按照一定方式加到Windows驱动的INF文件里才能使用。
john_liqinghan 2014-04-09
  • 打赏
  • 举报
回复
引用 9 楼 haolvshiqi 的回复:
引用 8 楼 liqinghan 的回复:
个人感觉升级无非就是把存放APP的Flash的地方擦除,然后再把新的程序擦写到那块 区域里面。至于利用USB,(在0x0800 0000)设置一个升级程序,改程序可以实现USB HID功能,然后可以利用USB HID通信(可以自己做个上位机,应该很简单,自己定一些协议)从上位机把bin文件发送给下位机,然后擦除掉存放APP的Flash区,并把APP的bin文件写入到Flash区域,完毕以后,可调到APP运行即可
请问ST公司有没有stm32f407 usb bootloader的源代码呢?我找了半天就找到一个DfuSe
这个我就不知道了。
我是小吕啊 2014-04-07
  • 打赏
  • 举报
回复
引用 8 楼 liqinghan 的回复:
个人感觉升级无非就是把存放APP的Flash的地方擦除,然后再把新的程序擦写到那块 区域里面。至于利用USB,(在0x0800 0000)设置一个升级程序,改程序可以实现USB HID功能,然后可以利用USB HID通信(可以自己做个上位机,应该很简单,自己定一些协议)从上位机把bin文件发送给下位机,然后擦除掉存放APP的Flash区,并把APP的bin文件写入到Flash区域,完毕以后,可调到APP运行即可
请问ST公司有没有stm32f407 usb bootloader的源代码呢?我找了半天就找到一个DfuSe
knate 2014-04-07
  • 打赏
  • 举报
回复
引用 9 楼 haolvshiqi 的回复:
引用 8 楼 liqinghan 的回复:
个人感觉升级无非就是把存放APP的Flash的地方擦除,然后再把新的程序擦写到那块 区域里面。至于利用USB,(在0x0800 0000)设置一个升级程序,改程序可以实现USB HID功能,然后可以利用USB HID通信(可以自己做个上位机,应该很简单,自己定一些协议)从上位机把bin文件发送给下位机,然后擦除掉存放APP的Flash区,并把APP的bin文件写入到Flash区域,完毕以后,可调到APP运行即可
请问ST公司有没有stm32f407 usb bootloader的源代码呢?我找了半天就找到一个DfuSe
DFU可以通过USB的 某些型号. 如果是APP方式的,官方只是提示几乎可以通过所有方式(当然包括USB)进行升级. 官方范例是没有的, 某些开发板可能有(不敢绝对肯定有),这个方式实现起来太飘了,而且即使只针对某一种接口, 实现方式也是多种多样的. 比较好的方式是直接接管中断向量表.应该也是官方比较推荐的.当然了,这里还需要处理其他的一些工作. 但这些都是细节上的东西, 大原则上讲,只要支持flash 擦写,就有可能实现这类功能,(只是有可能)
john_liqinghan 2014-03-28
  • 打赏
  • 举报
回复
个人感觉升级无非就是把存放APP的Flash的地方擦除,然后再把新的程序擦写到那块 区域里面。至于利用USB,(在0x0800 0000)设置一个升级程序,改程序可以实现USB HID功能,然后可以利用USB HID通信(可以自己做个上位机,应该很简单,自己定一些协议)从上位机把bin文件发送给下位机,然后擦除掉存放APP的Flash区,并把APP的bin文件写入到Flash区域,完毕以后,可调到APP运行即可
mangoalx 2014-03-21
  • 打赏
  • 举报
回复
那就是要做一个bootloader带usb支持的。应该有demo工程可以用吧
dceacho 2014-03-20
  • 打赏
  • 举报
回复
引用 4 楼 haolvshiqi 的回复:
引用 2 楼 wangfan027 的回复:
难道你们老师是想让你们学习bootloader?
我在st的官方网站上下载了DfuSe,它的使用步骤中有:用Jlink之类的东西把这个hex的bootloader刷进stm32的内部flash,请问这个bootloader是自己编写的吗?
是的,相当于一个新工程, 工作流程是开机bootloader启动,如果检测到需要烧写程序则把从USB接收到的数据写入aprom中
我是小吕啊 2014-03-20
  • 打赏
  • 举报
回复
引用 3 楼 u012586257 的回复:
只玩过一次,应该是不需要ulink,和ti的m3,m4一样,开发板自带debug接口,连一条usb线就行
我并没有开发板,是我们自己设计的电路板。
我是小吕啊 2014-03-20
  • 打赏
  • 举报
回复
引用 2 楼 wangfan027 的回复:
难道你们老师是想让你们学习bootloader?
我在st的官方网站上下载了DfuSe,它的使用步骤中有:用Jlink之类的东西把这个hex的bootloader刷进stm32的内部flash,请问这个bootloader是自己编写的吗?
mangoalx 2014-03-13
  • 打赏
  • 举报
回复
只玩过一次,应该是不需要ulink,和ti的m3,m4一样,开发板自带debug接口,连一条usb线就行
dceacho 2014-03-13
  • 打赏
  • 举报
回复
难道你们老师是想让你们学习bootloader?

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧