自制Jlink-OB(带串口)

自制Jlink-ob(带串口);

January 23, 2022 · 1 min · Rancho

H750枚举U盘拖拽式BootLoader+外部spi_flash

程序已经写好了; Github地址:https://github.com/fan-pengfei/Bootloader_H750_SD/tree/master

August 22, 2021 · 1 min · Rancho

oled使用技巧

OLED 局部刷新提高帧率. 待续

August 20, 2021 · 1 min · Rancho

Stm32蓝牙串口下载

之前准备电赛的时候,需要用到无线调试器,先是上淘宝看了一下,基本都是大几百,所以想着自己自制一个,直接搞DAP无线调试器有点难,所以就用手头现有的蓝牙模块搞了一个串口无线下载器,调试的话就靠printf打印了; 也做了好几个版本,最初的版本主要有两个大的问题: 1、没有程序校验过程,不能保证单片机收到的APP程序是完整且正确的; 2、没有错误解决机制,一旦APP程序错误或者程序跑飞,就必须手动按下复位键进行复位; 为解决以上两个问题,采取了以下措施 1、对APP程序加入CRC校验; 2、加入看门狗,解决程序跑飞问题; 以下是关于这个项目的具体介绍: 一、APP程序部分 首先要有一个APP程序,与一般的程序相比,APP程序有两个地方需要进行配置: 分别如下图所示: 1、在system_stm32f4xx.c中进行修改: 2、在小锤子那里进行修改: 3、修改完毕后,进行正常的编译即可; 二、BIN文件的处理 最初的版本并没有加入crc校验,所以经常会出错,导致程序经常跑飞,所以加入了crc32校验;经检验,效果那是非常的好; 为什么是采用bin文件而不是使用更容易得到的hex文件呢? 原因很简单:因为写入单片机flash的程序实际就是bin文件,hex文件需要转换才能写进flash中; 以上操作只是得到了hex文件,而我们需要的是bin文件,以下是对hex文件的处理过程: 1、第一步呢,当然是得到最初的bin文件;而Keil默认情况下编译成功后生成的是Hex文件,而不是bin文件,所以要将Hex文件转换为bin文件,当然是有现成的Hex转bin的程序的,但是比较麻烦,可以用Keil自带的功能完成编译后自动生成bin文件的过程,具体的方法请自行百度; 这是我的配置,仅供参考: D:\Keil_v5\ARM\ARMCC\bin\fromelf.exe —bin -o fromelf —bin -o “$L@L.bin” “#L” 2、然后是对bin文件进行处理,也就是crc32校验码的生成以及插入该校验码到bin文件中,我用的是python脚本的方式,代码如下: # -*- coding:utf-8 -*- import binascii import os import sys def crc2hex(crc): res='' for i in range(4): t=crc & 0xFF crc >>= 8 res='%02X%s' % (t, res) return res inputfile = "E:\IAP\APP\Project\OBJ\STM32F407.bin"#实际存放的bin文件路径 isfile = os.path.isfile(inputfile); print(inputfile); fp = open(inputfile, "r+b") #直接打开一个文件,如果文件不存在则创建文件 filesize = os.path.getsize(inputfile) print("ZI app firmware size:", filesize, "bytes.") #计算bin文件的CRC,首先清空CRC32区域的4个byte fp.seek(0x1c, 0)#从bin文件开始,偏移地址为0x1c的地方存放bin的CRC32 clear4bytes = '00000000' c4 =binascii.unhexlify(clear4bytes) fp.write(c4) #将CRC32存放的区域4bytes清零 fp.seek(0, 0)#从0开始读取整个bin file_content = fp.read()#读整个文件内容到 file_content crc = binascii.crc32(file_content) print('CRC32:', hex(crc)) fp.seek(0x1c, 0)#从bin文件开始,偏移地址为0x1c的地方存放bin的CRC32 #存放计算CRC32四个字节 crcstr_2 = crc2hex(crc) r=binascii.unhexlify(crcstr_2) fp.write(r) fp.close() sys.exit(0)##正常退出 代码我就不多解释了,应该还是挺容易看懂的; ...

August 19, 2021 · 3 min · Rancho