STM32
直播中

七上八下

9年用户 905经验值
私信 关注
[问答]

STM32F4 Keil程序在RAM中调试运行的问题求解

用Keil,设置好向量表在ram中,然后修改程序位置,调试载入时设置pc,sp等,能正常调试。我的程序仅仅就是进入main后,初始化串口,开启systick,然后循环不停打印systick中断程序中自定义的计数器。
但是不经意间发现个问题:
当我拿的芯片设置了读写保护(jlink flash 下点命令 secure chip)后,可以进入调试,但是无法进入中断(暂时只试了systick中断),打印出来的计数器值一直是0,停止调试直接看变量也是0
但是我unsecure chip后,又可以进入中断了,打印和直接看变量,计数器又都正常了。这中断怎么和读写保护位扯上关系了?

然后又实验:用jlink commander,手动loadbin到ram,然后同样设置好pc,sp,xpsr还有vect,然后运行,从打印的结果看,同样中断没起来。但这回是不管有没有开flash读写保护都一样的结果。
有人遇到过同样的问题没???
求解!!!

回帖(1)

李艳

2024-5-13 17:54:24
在STM32F4系列微控制器中,读写保护(Read-Only Protection,ROP)和写保护(Write-Only Protection,WOP)是一种安全特性,用于保护程序和数据存储区域免受未授权的读写操作。当芯片被设置为读写保护状态时,某些寄存器和存储区域将变得不可写,这可能会影响到中断的正常工作。

在您的情况下,当芯片被设置为读写保护状态时,可能发生了以下几种情况之一:

1. 中断向量表被锁定:当芯片被设置为读写保护状态时,中断向量表可能被锁定,导致中断无法正常触发。这可能是由于中断向量表存储在被保护的存储区域内。

2. 中断服务例程(ISR)被锁定:在某些情况下,中断服务例程可能存储在被保护的存储区域内,导致在读写保护状态下无法执行。

3. 中断寄存器被锁定:STM32F4系列微控制器的中断寄存器可能受到读写保护的影响,导致在保护状态下无法正常配置和触发中断。

为了解决这个问题,您可以尝试以下方法:

1. 确保中断向量表、中断服务例程和中断寄存器都存储在未受保护的存储区域内。这可以通过在Keil中设置适当的内存区域来实现。

2. 在调试过程中,暂时禁用读写保护。这可以通过J-Link命令 `secure chip off` 来实现。请注意,这仅在调试过程中有效,不会影响最终烧录到芯片中的程序。

3. 如果可能,尝试使用其他中断源,以确定问题是否与特定的中断源有关。

4. 检查您的程序中是否有任何可能导致中断寄存器被锁定的操作,例如错误的寄存器配置或写入受保护的存储区域。

5. 如果问题仍然存在,您可能需要查阅STM32F4系列微控制器的参考手册,以获取有关读写保护和中断的详细信息。

总之,读写保护可能会影响中断的正常工作,特别是在保护状态下对中断向量表、中断服务例程和中断寄存器的访问。通过确保这些组件存储在未受保护的存储区域内,或者在调试过程中暂时禁用读写保护,您应该能够解决这个问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分