STM32通过Python下载bin文件

参考:https://github.com/pavelrevak/stm32bl

例子:

test connection
stm32loader -p /dev/tty.SLAB_USBtoUART
dump content of FLASH memory
stm32loader -p /dev/tty.SLAB_USBtoUART -d
save content of FLASH memory
stm32loader -p /dev/tty.SLAB_USBtoUART -r file.bin
write bin file to FLASH from selected address
stm32loader -p /dev/tty.SLAB_USBtoUART -a 0x08003000 -w file.bin
mass erase, write bin file to FLASH, verify and execute application
stm32loader -p /dev/tty.SLAB_USBtoUART -m -w file.bin -f -x
help
stm32loader -h

原理:
  通过串口通讯(Pyserial库)对进入bootload状态的STM32单片机进行指令发送,将KEIL生成的bin文件下载到单片机flash中

步骤:

  1. 发送0X7f进行连接STM32 返回值 0X1f或者0x79
  2. 发送0x00+0xff(异或运算 0x00^0xff) 询问单片机bootversion 返回值:
    [121, 11, 34, 0, 1, 2, 17, 33, 49, 67, 99, 115, 130, 146, 121]
    第三个为版本号0x22 即2.2
  3. 发送0x02+0xfd(异或运算 0x02^0xff) 询问单片机chip id返回值:
    [121, 1, 4, 16, 121] b'\x79\x01\x04\x10\x79'
    第三、四个为版本号0410
  4. 发送下载指令,写入flash数据

KEIL生成bin文件: (KEIL4好像无效,5能正常使用)
$K\ARM\ARMCC\bin\fromelf.exe --bin --output=@L.bin !L

Pyvisa替代: 特别注意pyserial 3.0 以上版本不支持xp!!!
后续将pyserial用Pyvisa替代,注意事项:

  1. 从缓冲区读取需要注意read的截止符,会提前终止,必须不断循环读取,直到字节达到指定长度。
  2. 读取字节
data , _= rms.visalib.read(serial_port.session, serial_port.bytes_in_buffer)
data0 = list(data)
print(":".join(['%02x' % d for d in data0]))  #按位取值
  1. write后需要ms级才能刷新缓冲区,需要延时0.1s才能进行read操作!!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官方教程: https://nodemcu.readthedocs.io/en/master/ 安装步骤: htt...
    Zszen阅读 4,438评论 4 51
  • 转眼间天亮了...... 然后就想起了一个朋友QQ的个性签名:年轻人总是要为一些自己认为有意义的事情而废寝忘食,通...
    杨奉武阅读 10,814评论 0 4
  • 特殊文件系统 1.proc文件系统 /proc是一个位于内存中的伪文件系统(in-memory pseudo-fi...
    Mr_Michael阅读 1,442评论 0 1
  • 学习stm32gpio 学习linux 程序员的三大方向 程序员的方向,一般可以分为3类:专业领域、业务领域、操作...
    王公民阅读 820评论 0 3
  • 1.命令格式:ifconfig [网络设备] [参数] 2.命令功能: ifconfig 命令用来查看和配置网络设...
    Nuuuu阅读 3,819评论 0 12