当前位置: 首页 > news >正文

JLINK脚本初始化外部SDRAM STM32H7

STM32H723  外部时钟8M,接了SDRAM1(因为有两个SDRAM区域,我用了第一个), 容量64M,JLINK脚本初始化PLL和SDRAM控制器,然后使得IDE可以把程序下载到SDRAM能跑起来
引脚配置如下:

/** FMC GPIO ConfigurationPF0   ------> FMC_A0PF1   ------> FMC_A1PF2   ------> FMC_A2PF3   ------> FMC_A3PF4   ------> FMC_A4PF5   ------> FMC_A5PA4   ------> FMC_D8PA7   ------> FMC_SDNWEPC4   ------> FMC_SDNE0PC5   ------> FMC_SDCKE0PF11   ------> FMC_SDNRASPF12   ------> FMC_A6PF13   ------> FMC_A7PF14   ------> FMC_A8PF15   ------> FMC_A9PG0   ------> FMC_A10PG1   ------> FMC_A11PE7   ------> FMC_D4PE8   ------> FMC_D5PE9   ------> FMC_D6PE10   ------> FMC_D7PE12   ------> FMC_D9PE13   ------> FMC_D10PE14   ------> FMC_D11PE15   ------> FMC_D12PD8   ------> FMC_D13PD9   ------> FMC_D14PD10   ------> FMC_D15PD14   ------> FMC_D0PD15   ------> FMC_D1PG2   ------> FMC_A12PG4   ------> FMC_BA0PG5   ------> FMC_BA1PG8   ------> FMC_SDCLKPD0   ------> FMC_D2PD1   ------> FMC_D3PG15   ------> FMC_SDNCASPE0   ------> FMC_NBL0PE1   ------> FMC_NBL1*/

所以脚本应该如下:

int SetupHardware(void) {U32 pll_status;int pll_timeout;  // 100ms超时U32 CR;JLINK_TARGET_Halt();  // 暂停目标设备// PLL配置JLINK_MEM_WriteU32(0x58024400, 0x01<<16);  //使能HSEwhile(1){CR= JLINK_MEM_ReadU32(0x58024400);if(CR&(1<<17)){break;}}//pll_status=0x0F034025;//pll_status=pll_status&(~(1<<24));//pll_status=pll_status&(~(1<<26));//JLINK_MEM_WriteU32(0x58024400, pll_status);  //关闭PLL1 PLL2JLINK_MEM_WriteU32(0x58024428, 0x02002042);   // RCC->PLLCKSELR 对不上JLINK_MEM_WriteU32(0x5802442C, 0x01FF0095);   // RCC->PLLCFGR JLINK_MEM_WriteU32(0x58024430, 0x01030112);   // RCC->PLL1DIVRJLINK_MEM_WriteU32(0x58024438, 0x03040263);   // RCC->PLL2DIVRJLINK_MEM_WriteU32(0x58024440, 0x01010280);   // RCC->PLL3DIVRJLINK_MEM_WriteU32(0x58024400, 0x0F034025);  // RCC->CR  JLINK_SYS_Sleep(100);pll_status = 0;pll_timeout = 100;  // 100ms超时do {pll_status = JLINK_MEM_ReadU32(0x58024400);  // 读取RCC_CRJLINK_SYS_Sleep(1);pll_timeout=pll_timeout-1;} while (((pll_status & (1 << 25)) == 0) &&  // PLL1未锁定((pll_status & (1 << 27)) == 0) &&  // PLL2未锁定((pll_status & (1 << 29)) == 0) &&  // PLL3未锁定(pll_timeout > 0));if (pll_timeout <= 0) {JLINK_SYS_Report1("PLL锁定失败!状态寄存器值:0x%08X", pll_status);  // 错误报告[6](@ref)}// ===== RCC时钟配置 =====JLINK_MEM_WriteU32(0x58024400, 0x0F034025);  // RCC->CRJLINK_SYS_Sleep(100);JLINK_MEM_WriteU32(0x58024404, 0x400004F7);  // RCC->ICSCRJLINK_MEM_WriteU32(0x58024410, 0x0000001B);  // RCC->CFGRJLINK_MEM_WriteU32(0x58024418, 0x00000048);   // RCC->D1CFGRJLINK_MEM_WriteU32(0x5802441C, 0x00000440);   // RCC->D2CFGRJLINK_MEM_WriteU32(0x58024420, 0x00000040);   // RCC->D3CFGR// 时钟源选择JLINK_MEM_WriteU32(0x5802444C, 0x00010001);   // RCC->D1CCIPRJLINK_MEM_WriteU32(0x58024450, 0x20000000);   // RCC->D2CCIP1R// 时钟使能JLINK_MEM_WriteU32(0x58024534, 0x00001000);   // RCC->C1_AHB3ENRJLINK_MEM_WriteU32(0x580244D4, 0x00001000);   // RCC->AHB3ENRJLINK_MEM_WriteU32(0x580244E0, 0x000000FF);   // RCC->AHB4ENRJLINK_MEM_WriteU32(0x58024540, 0x000000FF);   // RCC->C1_AHB4ENRJLINK_MEM_WriteU32(0x580244F4, 0x00010002);   // RCC->APB4ENRJLINK_MEM_WriteU32(0x58024554, 0x00010002);   // RCC->C1_APB4ENR// 低功耗时钟使能JLINK_MEM_WriteU32(0x5802455C, 0xF0E95111);   // RCC->C1_AHB3LPENRJLINK_MEM_WriteU32(0x580244FC, 0xF0E95111);   // RCC->AHB3LPENRJLINK_MEM_WriteU32(0x58024564, 0x60030271);   // RCC->C1_AHB2LPENRJLINK_MEM_WriteU32(0x58024504, 0x60030271);   // RCC->AHB2LPENRJLINK_MEM_WriteU32(0x58024508, 0x312806FF);   // RCC->AHB4LPENRJLINK_MEM_WriteU32(0x58024568, 0x312806FF);   // RCC->C1_AHB4LPENR// ===== GPIO配置 =====// GPIOAJLINK_MEM_WriteU32(0x58020000, 0xEBFFBEFF);   // MODERJLINK_MEM_WriteU32(0x58020008, 0x0C00C300);   // OSPEEDRJLINK_MEM_WriteU32(0x5802000C, 0x64000000);   // PUPDRJLINK_MEM_WriteU32(0x58020020, 0xC00C0000);   // AFRL// GPIOCJLINK_MEM_WriteU32(0x58020800, 0xFFFFFAFF);   // MODERJLINK_MEM_WriteU32(0x58020808, 0x00000F00);   // OSPEEDRJLINK_MEM_WriteU32(0x58020820, 0x00CC0000);   // AFRL// GPIODJLINK_MEM_WriteU32(0x58020C00, 0xAF6AFFFA);   // MODERJLINK_MEM_WriteU32(0x58020C08, 0xF0FF000F);   // OSPEEDRJLINK_MEM_WriteU32(0x58020C0C, 0x00400000);   // PUPDRJLINK_MEM_WriteU32(0x58020C14, 0x00000800);   // ODRJLINK_MEM_WriteU32(0x58020C20, 0x000000CC);   // AFRLJLINK_MEM_WriteU32(0x58020C24, 0xCC000CCC);   // AFRH// GPIOEJLINK_MEM_WriteU32(0x58021000, 0xAAEABFFA);   // MODERJLINK_MEM_WriteU32(0x58021008, 0xFF3FC00F);   // OSPEEDRJLINK_MEM_WriteU32(0x58021020, 0xC00000CC);   // AFRLJLINK_MEM_WriteU32(0x58021024, 0xCCCC0CCC);   // AFRH// GPIOFJLINK_MEM_WriteU32(0x58021400, 0xAABDFAAA);   // MODERJLINK_MEM_WriteU32(0x58021408, 0xFFC00FFF);   // OSPEEDRJLINK_MEM_WriteU32(0x58021420, 0x00CCCCCC);   // AFRLJLINK_MEM_WriteU32(0x58021424, 0xCCCCC000);   // AFRH// GPIOGJLINK_MEM_WriteU32(0x58021800, 0xBFFEFAEA);   // MODERJLINK_MEM_WriteU32(0x58021808, 0xC0030F3F);   // OSPEEDRJLINK_MEM_WriteU32(0x58021820, 0x00CC0CCC);   // AFRLJLINK_MEM_WriteU32(0x58021824, 0xC000000C);   // AFRHreturn 0;  // 返回成功状态
}
int AfterResetTarget(void)
{return 0;//SetupHardware();
}
int ResetTarget(void)
{return SetupHardware();
}

http://www.dtcms.com/a/239380.html

相关文章:

  • 高等数学 | 第八章-向量值函数的积分与场论
  • LLMs 系列科普文(10)
  • 贝叶斯医学分析中“先验”的如何进行选择(文献解读)
  • UVM验证—第一课:方法学&类库&工厂
  • 基于PTN传输承载的4G网络-故障未连接...(我不理解哪错了排查了几遍没发现哪错啊啊啊啊)
  • GNSS高精度定位之-----星基差分
  • YooAsset 2.3.9版本 示例教程运行
  • RPG23.应用武器伤害(一):设置武器命中
  • 第八章 信息安全基础知识
  • 【量化】策略交易 - 均线策略(Moving Average Strategy)
  • 智慧园区管理平台
  • SpringCloudAlibaba和SpringBoot版本问题
  • DQN强化学习怎么来使用
  • 主体与代理的义项选择用意: 融智学视域下的三元操作机制
  • Go语言中的if else控制语句
  • Python训练营---DAY48
  • AI医生时代来临!o1模型在医疗诊断中超越人类医生
  • Springboot 基于MessageSource配置国际化
  • 玄机——某次行业攻防应急响应(带镜像)
  • 力扣-131.分割回文串
  • 72常用控件_QGridLayout的使用
  • 一个自动反汇编脚本
  • 大数据(3) 分布式文件系统HDFS
  • LLMs 系列科普文(15)
  • 第13次01:广告及商品数据呈现
  • MS8312A 车规 精密、低噪、CMOS、轨到轨输入输出运算放大器,用于传感器、条形扫描器
  • 2025-06-08 思考-人被基因和社会关系双重制约
  • 打卡day48
  • FlexRay总线
  • DAY 45 Tensorboard使用介绍