STM32F4—fsmc的配置步骤

本文介绍STM32微控制器外部存储器接口的配置步骤,包括GPIO时钟及FSMC时钟的开启,GPIO配置,以及片选控制、时序等寄存器的具体设置方法。

0:开启GPIO时钟和FSMC时钟

1:配置GPIO

2:配置片选控制寄存器

3:配置片选时序寄存器

4:配置写入时序寄存器

GPIO_InitTypeDef  GPIO_InitStructure;//GPIO配置寄存器
FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;//片选控制寄存器
FSMC_NORSRAMTimingInitTypeDef  readWriteTiming; //片选时序寄存器
FSMC_NORSRAMTimingInitTypeDef  writeTiming;//写入时序寄存器

  

### STM32F4 FSMC 驱动 LCD 示例代码与教程 #### 初始化 FSMC 和 LCD 控制器 为了使 STM32F4 能够通过 FSMC 接口驱动 TFTLCD,需要先初始化 FSMC 外设并设置相应的参数。具体来说,TFTLCD 可以被当作 SRAM 来控制,因此会使用相同的地址和数据总线[^1]。 ```c void FSMC_LCD_Init(void) { __HAL_RCC_FSMC_CLK_ENABLE(); // 启用 FSMC 时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; /* FSMC NE4 连接到 PE7 */ __HAL_RCC_GPIOE_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_FSMC; // 设置FSMC 功能模式 HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); } ``` #### 配置 FSMC NOR/SRAM Bank 接下来要配置 FSMC 的 NOR/SRAM Bank,这一步骤决定了如何访问连接到该银行的外部存储器或显示器: ```c static void MX_FSMC_NORSRAM1_Init(void){ FMC_NORSRAM_TimingTypeDef Timing = {0}; /** Perform the SRAM1 memory initialization sequence*/ hsram1.Instance = FMC_NORSRAM_DEVICE; hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE; /* Init the NORSRAM controller */ Timing.AddressSetupTime = 6; Timing.AddressHoldTime = 15; Timing.DataSetupTime = 8; Timing.BusTurnAroundDuration = 0; Timing.CLKDivision = 16; Timing.DataLatency = 17; Timing.AccessMode = FMC_ACCESS_MODE_A; if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK) { Error_Handler( ); } } ``` #### 编写简单的绘图函数 一旦完成了硬件层面的基础工作之后就可以编写一些基本图形绘制的功能来测试显示屏是否正常运作了。这里给出一个简单填充矩形区域颜色的例子: ```c void FillRectangle(uint16_t xStart,uint16_t yStart,uint16_t width,uint16_t height,uint16_t color){ uint16_t i,j; for(i=0;i<height;i++){ for(j=0;j<width;j++){ WritePixel(xStart+j,yStart+i,color); // 使用之前定义好的像素点写入方法 } } } // 写入单个像素的颜色值 void WritePixel(int16_t x,int16_t y,uint16_t color){ if((x >= 0)&&(y >= 0)&&(x < LCD_WIDTH)&&(y < LCD_HEIGHT)){ *(uint16_t*)(FramebufferBaseAddress+(y*LCD_WIDTH+x)*2)=color; } } ``` 上述代码片段展示了如何利用 FSMC 总线向外部设备发送命令序列以及传输图像数据的方法[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值