[STM32L0] STM32CubeIDE ISR在CCM SRAM中运行

[复制链接]
463|2
cutfall 发表于 2025-9-14 22:51 | 显示全部楼层 |阅读模式
我根据应用笔记AN 4996进行修改,应用程序工作不正常。

是否有使用STM32CubeIDE配置的示例项目,让中断例程在CCM RAM中运行?

//AT linker cmd file

MEMORY

{

RAM  (xrw)  : ORIGIN = 0x20000000,  LENGTH = 96K

FLASH  (rx)  : ORIGIN = 0x8000000,  LENGTH = 512K

CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 32K

}

  /*--- New CCMRAM linker section definition ---*/

_siccmram = LOADADDR(.ccmram);

  /* CCMRAM section */

  .ccmram :

{

  . = ALIGN(4);

  _sccmram = .; /* define a global symbols at ccmram start */

  *(.ccmram)

  *(.ccmram*)

  . = ALIGN(4);

  _eccmram = .; /* define a global symbols at ccmram end */

  } >CCMRAM AT> FLASH

/*--- End of CCMRAM linker section definition ---*/

//At startup code:

Reset_Handler:

ldr  r0, =_estack

mov  sp, r0     /* set stack pointer */

/* Copy the data segment initializers from flash to SRAM */

ldr r0, =_sdata

ldr r1, =_edata

ldr r2, =_sidata

movs r3, #0

b LoopCopyDataInit

CopyDataInit:

ldr r4, [r2, r3]

str r4, [r0, r3]

adds r3, r3, #4

LoopCopyDataInit:

adds r4, r0, r3

cmp r4, r1

bcc CopyDataInit

/* Copy from flash to CCMRAM */

ldr r0, =_sccmram

ldr r1, =_eccmram

ldr r2, =_siccmram

movs r3, #0

b LoopCopyCcmInit

CopyCcmInit:

ldr r4, [r2, r3]

str r4, [r0, r3]

adds r3, r3, #4

LoopCopyCcmInit:

adds r4, r0, r3

cmp r4, r1

bcc CopyCcmInit

/* End of copy to CCMRAM */



/* Zero fill the bss segment. */

ldr r2, =_sbss

ldr r4, =_ebss

movs r3, #0

b LoopFillZerobss

FillZerobss:

str r3, [r2]

adds r2, r2, #4

LoopFillZerobss:

cmp r2, r4

bcc FillZerobss

/* Call the clock system intitialization function.*/

  bl SystemInit

/* Call static constructors */

  bl __libc_init_array

/* Call the application's entry point.*/

bl main

LoopForever:

  b LoopForever

.size Reset_Handler, .-Reset_Handler

powerantone 发表于 2025-9-15 15:18 | 显示全部楼层
链接脚本需要修正一下。
cr315 发表于 2025-9-15 17:19 | 显示全部楼层
将中断例程放到CCMRAM。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

54

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部