《RT-Thread 入坑(二) 记录一些遇到问题》

  1. 问题一
    背景:偶发出现烧写不成功,重启电脑,插拔烧录器、更换烧录器都无效
开始下载程序:2025-02-17 15:15:26
C:\RT-ThreadStudio>cd /d C:\RT-ThreadStudio\repo\Extract\Debugger_Support_Packages\RealThread\PyOCD\0.1.3 
C:\RT-ThreadStudio\repo\Extract\Debugger_Support_Packages\RealThread\PyOCD\0.1.3>pyocd.exe flash --target=STM32F103RE --erase=auto -a=0x08000000 --frequency=1000000 D:\senye\02_code\01_mcu\01_HaiYuan\02_11_28_cost_reduction\ac_charger_reduction\Debug\ac_charger_debug.bin 
0000791:WARNING:rom_table:Invalid coresight component, cidr=0x0
0000862:CRITICAL:__main__:SWD/JTAG Transfer Fault @ 0x0803c068-0x0803c797
Traceback (most recent call last):
  File "pyocd\__main__.py", line 362, in run
  File "pyocd\__main__.py", line 527, in do_flash
  File "pyocd\flash\file_programmer.py", line 158, in program
  File "pyocd\flash\loader.py", line 168, in commit
  File "pyocd\flash\builder.py", line 421, in program
  File "pyocd\flash\builder.py", line 319, in _build_sectors_and_pages
  File "pyocd\flash\builder.py", line 264, in fill_end_of_page_gap
  File "pyocd\core\coresight_target.py", line 341, in read_memory_block8
  File "pyocd\coresight\cortex_m.py", line 661, in read_memory_block8
  File "pyocd\core\memory_interface.py", line 89, in read_memory_block8
  File "pyocd\probe\stlink_probe.py", line 271, in read_memory_block32
  File "pyocd\probe\stlink\stlink.py", line 387, in read_mem32
  File "pyocd\probe\stlink\stlink.py", line 345, in _read_mem
pyocd.core.exceptions.TransferFaultError: SWD/JTAG Transfer Fault @ 0x0803c068-0x0803c797
执行完毕, 耗时:1808ms.

使用通义千问查询后,排除几个问题后发现,之前应该用了一下离线烧录器
离线烧录器里面有配置写保护。所以重新打开st-link 下载器点击连接,进入下载,弹出警告忽略后,再使用rt-thredio 就能正常下载了

从你提供的信息来看,在尝试使用PyOCD工具对STM32F103RE目标设备进行编程时遇到了一个SWD/JTAG传输故障。具体错误信息为TransferFaultError: SWD/JTAG Transfer Fault @ 0x0803c068-0x0803c797,这意味着在试图访问或写入指定地址范围的内存时出现了问题。

这里有几个可能的原因和解决方法:

硬件连接问题:确保你的调试器(如ST-LINK)正确连接到目标板,并且连线没有损坏。有时,简单的重新插拔可以解决问题。
目标板电源:确认目标板已正确供电。低电压可能导致通信不稳定。
目标MCU状态:尝试复位目标MCU或者通过其他方式(比如按下复位按钮)让其进入正确的状态以接受编程。
固件或硬件保护:有些MCU具有读写保护功能,需要先解除保护才能进行编程。查阅STM32F103RE的手册了解如何检查和解除这种保护。
PyOCD版本兼容性:根据错误日志,使用的PyOCD版本是0.1.3,考虑到这是一次较旧的版本,可能存在一些bug或与当前硬件不完全兼容的地方。尝试更新PyOCD到最新版本看看是否能解决问题。
内存地址问题:确认你试图编程的.bin文件起始地址(在这个例子中是0x08000000)是否正确。如果目标MCU上的闪存起始地址与此不同,可能会导致编程失败。
希望这些建议能够帮助你解决问题。如果仍然无法解决,考虑提供更多关于你的开发环境、硬件设置等细节,以便进一步诊断问题。

在这里插入图片描述

  1. 问题二
    背景:以太网和4G模块共用一个串口,需要再开机时识别对应的模块,因为at client 初始化完成后,无对应的函数,去除初始化,所以先让以太网进行初始化,握手,失败后再切换4G模块进行握手。
    问题:串口打开->配置中断模式->发送数据->关闭串口,再使用at client初始化->收发正常。串口打开->配置DMA模式->发送数据->关闭串口,再使用at client初始化->收发数据偶发丢失
    at client 配置
    在这里插入图片描述
    串口配置
    在这里插入图片描述
  serial = rt_device_find(devname);

    if(serial == RT_NULL){
        /* 没有发现串口设备 */
        return RT_EIO;
    }
    ret = rt_device_open(serial, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_DMA_RX);

    struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; /* 初始化配置参数 */
                                            /* step2:修改串口配置参数 */
                                            config.baud_rate = BAUD_RATE_9600;        //修改波特率
                                            config.data_bits = DATA_BITS_8;           //数据位 8
                                            config.stop_bits = STOP_BITS_1;           //停止位 1
                                            config.bufsz  = 512;  //修改缓冲区
                                            config.parity = PARITY_NONE;           //无奇偶校验位

    /* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */
    if (rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config) != RT_EOK)
        return RT_ERROR;

    if(ret != RT_EOK){/* 打开设备失败 */
    	serial = RT_NULL;
        return ret;
    }

测试1:以太网初始化(使用DMA接收)初始化完成后,修改缓冲区,波特率,都无效
测试2:以太网初始化(使用中断接收)at client收发数据正常,4G可正常收发
测试3:以太网初始化(使用DMA接收),再次用中断打开关闭一次, at client收发数据丢失
测试4: 以太网初始化(使用DMA接收),初始化配置串口接收缓冲区大小512,关闭串口后,at client收发数据正常,4G可正常收发(缓冲区大小和配置的不一致会导致串口初始化失败)
???跟串口的接收缓冲大小有关 1
测试5: 以太网初始化(使用DMA接收),初始化配置串口接收缓冲区1024,关闭串口后,at client收发数据丢失
测试6: 以太网初始化(使用DMA接收),初始化配置串口接收缓冲区大小700,关闭串口后,at client收发数据正常,串口初始化失败(缓冲区大小和配置的不一致会导致串口初始化失败)
测试7: 以太网初始化(使用DMA接收),at_clinet的缓冲区大小改为1024,at client收发数据丢失
测试8:以太网初始化时 复位后时间拉长,4G模块初始化时间较长,太早发送数据会导致模块回复数据丢失
解决:复位引脚操作后需要2个模块等待的时间不一致,以太网200ms ,4G模块要10s,所以延长再统一发送数据,避免导致4g模块出现故障

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

未*望

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

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

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

打赏作者

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

抵扣说明:

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

余额充值