普冉MCU单片机 PY32 烧录程序后无法再次烧录的解决方法

使用PY32开发过程中,经常会一不小心把烧录脚配置成其他模式,这时想要再次烧录就提示swd口无法识别到了,这时候有几种解决方式,一种是在程序一开始加几秒延时,后面每次烧录都要重新上电,在他跑到配置IO程序之前把新程序重新烧录进去,但是这样每次都要插拔供电口,比较麻烦,而且如果此时已经烧录进去的程序没加延时,就无法再次烧录了

除了烧录脚复用了,还有其他情况可能也会使MCU烧录不了,比如程序中进入了stop/sleep低功耗模式,MCU配置了读保护等都有可能,这时候其实 也有其他办法。

就是先完全断掉MCU的电源,再重新上电,在MCU跑到用户程序之前,使用SWD接口时序对MCU进行复位并Halt CPU。这主要是使CPU和外围设备进入已知状态,并禁止CPU在编写程序时意外运行部分代码。

具体操作步骤如下:

a)Write 0xA05F0001 to DHCSR, which halting debug enabled.

b)Write 0x01 to DEMCR. This enable Reset Vector Catch.

c)Write 0xFA050004 to AIRCR. This reset the core.

现在,内核将在第一条指令时暂停,所有外围设备和寄存器(调试寄存器除外)都将设置为复位值

暂停MCU内核后,这时如果擦除MCU的程序,恢复默认option选项字节(清楚读保护之类的),就可以实现重新烧录程序了,下面这个工具也就实现了这个流程,并加入了DAP仿真功能,使用上位机下载芯片数据后,就可以一边调试一边恢复(而且还不需要接复位脚),不用担心调试过程中烧录不了了

### PY32F040 芯片固件烧录方法 PY32F040 是 PY 系列单片机的一员,其支持通过专用的离线烧录器完成固件烧录。以下是关于该芯片固件烧录的相关说明: #### 支持的烧录工具 PY32 离线烧录器能够兼容 PY 系列多款型号芯片的固件烧录工作,其中包括 PY32F040 型号[^1]。此烧录器不仅适用于在线调试环境下的编程需求,还特别适合用于批量生产中的快速烧录。 #### 固件格式支持 对于 PY32F040 的固件烧录,支持加载两种常见的固件文件格式:“Hex” 和 “Bin”。这意味着开发者可以根据实际项目的需求选择合适的文件类型进行上传。 #### 配置选项 PY32 离线烧录器提供了丰富的配置功能来满足不同的应用场合。这些配置包括但不限于: - **读写保护**:防止未经授权访问内部存储数据。 - **限制烧写次数**:有助于延长闪存寿命并控制使用权限。 - **滚码机制**:增强安全性,减少重复攻击风险。 以上特性均可以通过简单易懂的操作界面上实现调整和设定。 #### 实际案例分享 如果手头仅有 CH341 类型的基础烧录设备而非官方推荐的 PY32 离线烧录器,则可借鉴其他 MCU 平台(如 STM32)的经验来进行尝试性操作。例如,在缺少特定链接适配器的情况下,有人成功利用 FLYMCU 工具向 PY32F002AF15P6TU 这一具体型号导入已编译 HEX 文件实例[^2]。这表明即使不是标准流程下也可能找到变通解决方案。 #### 示例代码片段 (Python脚本模拟简易串口通信过程) 下面给出一段简单的 Python 脚本来展示如何通过串口发送命令至目标板卡执行基本擦除与下载动作: ```python import serial def erase_and_program(port, baudrate=9600): ser = serial.Serial(port, baudrate) # 发送擦除指令 ser.write(b'ERASE\r\n') response_erase = ser.readline().decode('utf-8').strip() if 'OK' not in response_erase: raise Exception(f"Erase failed: {response_erase}") # 开始传输二进制数据... with open("firmware.bin", "rb") as f: while chunk := f.read(1024): # 每次读取1KB的数据块 ser.write(chunk) ser.close() if __name__ == "__main__": try: erase_and_program("/dev/ttyUSB0") print("Programming completed successfully.") except Exception as e: print(e) ``` 注意上述仅为理论演示用途,请依据实际情况修改端口号以及波特率参数等内容后再运行测试!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鲜衣怒马少年时'''

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

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

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

打赏作者

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

抵扣说明:

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

余额充值