当前位置: 首页 > 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.xdnf.cn/news/940375.html

相关文章:

  • 基于51单片机的红外防盗及万年历仿真
  • 2025-04-23-基于上下位机结构的系统实例分析
  • 基于n8n指定网页自动抓取解析入库工作流实战
  • 开源一个心流舱付费空间番茄风水钟
  • 车载诊断架构 --- 整车诊断数据管理策略
  • LR修图软件|Lightroom 2025网盘下载与安装教程指南
  • C++_核心编程_菱形继承
  • gem5-gpu教程 在gem5-gpu上运行多个应用程序
  • java复习 05
  • 聊聊集群间数据复制和持久化机制
  • Auto Think,快手开源的自动思考大模型
  • 从一次日期格式踩坑经历,谈谈接口设计中的“约定大于配置“
  • python打卡day48@浙大疏锦行
  • The Quantization Model of Neural Scaling
  • 【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
  • 一张图 介绍什么是字节流
  • 【证书】2025公益课,人工智能训练师-高级,知识点与题库(橙点同学)
  • java 乐观锁的实现和注意细节
  • 【GPT模型训练】第二课:张量与秩:从数学本质到深度学习的基础概念解析
  • 从认识AI开始-----变分自编码器:从AE到VAE
  • webgl
  • cpp自学 day2(—>运算符)
  • 常见 DOM 事件全解析
  • DAY 48 随机函数与广播机制
  • 模拟 - #介绍 #题解
  • 使用智能表格做需求管理
  • 【本地AI大模型部署+可视化界面图文教程】Ollama+Qwen3
  • 从C到C++语法过度1
  • Ajax入门
  • SAP顾问职位汇总(第23周)