IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【ThreadX全家桶】GuiX移植之FMC -> 正文阅读

[嵌入式]【ThreadX全家桶】GuiX移植之FMC


前言

GuiX移植内容较多,打算分五篇来讲述
1)GuiX移植之FMC
2)GuiX移植之LTDC
3)GuiX移植之DMA2D
4)GuiX移植之GuiX studio
5)GuiX移植


软硬件介绍:STM32F429BIT(反客的一块板子,挺适合拿来学习ThreadX的);
SDRAM型号:W9812G2
ThreadX版本:6.1.3;
GuiX版本:6.1.3;
IDE:KEIL5 v5.31.0.0版本、STM32CubeMX;
ARM编译器:AC5

一、FMC配置

1、使用STM32CubeMX配置并生成FMC工程。

2、FMC使用AHB时钟,配置符合SDRAM数据手册要求的时钟。

3、FMC详细配置如下:

在这里插入图片描述①SDRAM 1和SDRAM 2控制的IO相同,所以选择哪个都可以。
②笔者手上板子的SDRAM CKE和CS引脚接与SDCKE1+SDNE1引脚相同,所以选择SDCKE1+SDNE1。
③其余几个配置项查看数据手册获悉。

4、时序及其他配置如下:

在这里插入图片描述
①SDRAM control中关闭写保护,使能突发读,可提高读写效率
②时序配置可参考下图,在SDRAM数据手册中查找相应的项目即可
在这里插入图片描述

5、成功工程。

二、修改工程并测试

1、SDRAM初始化

SDRMA不同于SRAM的上电即用,SDRAM上电后需要进行初始化方可使用。故需要在FMC初始化后进行SDRAM初始化。具体可参考《安富莱STM32-V6开发板_用户手册》第39章学习。

提供一个简易版的SDRAM初始化代码:

#include "main.h"
void SDRAM_delay(__IO uint32_t nCount)
{
  __IO uint32_t index = 0; 
	
  for(index = (100000 * nCount); index != 0; index--);

}


void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command)
{
  __IO uint32_t tmpmrd = 0;
  
  /* Configure a clock configuration enable command */
  Command->CommandMode 					= FMC_SDRAM_CMD_CLK_ENABLE;	// 开启SDRAM时钟 
  Command->CommandTarget 				= FMC_COMMAND_TARGET_BANK; 	// 选择要控制的区域
  Command->AutoRefreshNumber 			= 1;
  Command->ModeRegisterDefinition 	= 0;
  
  HAL_SDRAM_SendCommand(hsdram, Command, SDRAM_TIMEOUT);	// 发送控制指令
  SDRAM_delay(1);		// 延时等待
  
  /* Configure a PALL (precharge all) command */ 
  Command->CommandMode 					= FMC_SDRAM_CMD_PALL;		// 预充电命令
  Command->CommandTarget 				= FMC_COMMAND_TARGET_BANK;	// 选择要控制的区域
  Command->AutoRefreshNumber 			= 1;
  Command->ModeRegisterDefinition 	= 0;
  
  HAL_SDRAM_SendCommand(hsdram, Command, SDRAM_TIMEOUT);  // 发送控制指令
  
  /* Configure a Auto-Refresh command */ 
  Command->CommandMode 					= FMC_SDRAM_CMD_AUTOREFRESH_MODE;	// 使用自动刷新
  Command->CommandTarget 				= FMC_COMMAND_TARGET_BANK;          // 选择要控制的区域
  Command->AutoRefreshNumber			= 8;                                // 自动刷新次数
  Command->ModeRegisterDefinition 	= 0;
  
  HAL_SDRAM_SendCommand(hsdram, Command, SDRAM_TIMEOUT);	// 发送控制指令
  
  /* Program the external memory mode register */
  tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_2          |
                     SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   |
                     SDRAM_MODEREG_CAS_LATENCY_3           |
                     SDRAM_MODEREG_OPERATING_MODE_STANDARD |
                     SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
  
  Command->CommandMode					= FMC_SDRAM_CMD_LOAD_MODE;	// 加载模式寄存器命令
  Command->CommandTarget 				= FMC_COMMAND_TARGET_BANK;	// 选择要控制的区域
  Command->AutoRefreshNumber 			= 1;
  Command->ModeRegisterDefinition 	= tmpmrd;
  
  HAL_SDRAM_SendCommand(hsdram, Command, SDRAM_TIMEOUT);	// 发送控制指令
  
  hsdram->Instance->SDRTR |= ((uint32_t)((1386)<< 1));	// 设置刷新计数器 
}

在main.c文件中,FMC初始化后调用SDRAM初始化函数。
在这里插入图片描述

2、测试SDRAM

注:SDRAM映射到BANK1还是BANK2由CKE和CS决定,而不是图1中的SDRAM 1/SDRAM 2,图1中CKE和CS选择的时SDCKE1+SDNE1,所以映射到的地址空间时BANK2。
在这里插入图片描述

测试代码如下:

#define SDRAMSTARTADDR	0xD0000000
uint32_t x=0,y=0;
uint32_t *wp=NULL;
void FMC_TaskInit()
{
	wp = (uint32_t *)SDRAMSTARTADDR;
	for(x=0; x<4*1024; x++)
	{
		wp[x] = x;
	}
}

踩坑记录

1、图1中的SDRAM 1/SDRAM 2与地址映射空间没有关系。
2、SDRAM不同于SRAM,必须初始化后才可使用。
3、KEIL DEBUG时,for循环会作为一个整体,不会单次执行。所以for循环很长时,断点不触发,会被误认为程序跑飞。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 07:59:49  更:2021-07-28 08:01:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 18:11:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码