OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3435|回复: 3

stm32f427的FMC读写FRAM时数据时地址线无反应

[复制链接]

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2014-8-21
在线时间
26 小时
发表于 2018-3-29 21:57:44 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 YTCH2014 于 2018-3-29 21:57 编辑

stm32f427的FMC读写FRAM时数据时地址线无反应,但是数据线、写使能、读使能、NE2选通端均有波形输出,只有地址线一直为低电平,初始化的代码与地址调用读写程序如下有人知道什么原因么?

[mw_shl_code=c,true]#ifndef _SRAM_H
#define _SRAM_H
#include "sys.h"
//FMC头文件
extern SRAM_HandleTypeDef SRAM_Handler;//SDRAM¾ä±ú
#define Bank1_SRAM_ADDR    (0x640000f0) //SDRAM¿aê¼μØÖ·
#define RAM_Base_Addr (u8*)Bank1_SRAM_ADDR

//SDRAMÅäÖÃ2Îêy


void SRAM_Init(void);
#endif
[/mw_shl_code]


[mw_shl_code=c,true]#include "sram.h"
#include "delay.h"
//这是FMC的初始化函数,19位地址线,8位数据线,选通信号是FMS_NE2,芯片信号是FM22L16采用的8位模式
SRAM_HandleTypeDef SRAM_Handler;   //SDRAM句柄

//SDRAM初始化
void SRAM_Init(void)
{
        FMC_NORSRAM_TimingTypeDef Timing;
        FMC_NORSRAM_TimingTypeDef ReadTiming;

  /** Perform the SRAM1 memory initialization sequence
  */
  SRAM_Handler.Instance = FMC_NORSRAM_DEVICE;
//SRAM_Handler.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  /* hsram1.Init */
  SRAM_Handler.Init.NSBank = FMC_NORSRAM_BANK2;
  SRAM_Handler.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
  SRAM_Handler.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
  SRAM_Handler.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_8;
  SRAM_Handler.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
  SRAM_Handler.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
  SRAM_Handler.Init.WrapMode = FMC_WRAP_MODE_DISABLE;
  SRAM_Handler.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
  SRAM_Handler.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
  
  SRAM_Handler.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
  SRAM_Handler.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
  SRAM_Handler.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
  SRAM_Handler.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
  SRAM_Handler.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ASYNC;
  SRAM_Handler.Init.PageSize = FMC_PAGE_SIZE_NONE;
  /* Timing */
  Timing.AddressSetupTime = 2;
  Timing.AddressHoldTime = 3;
  Timing.DataSetupTime = 10;
  Timing.BusTurnAroundDuration = 0;
  Timing.CLKDivision = 1;
  Timing.DataLatency = 0;
  Timing.AccessMode = FMC_ACCESS_MODE_A;
  HAL_SRAM_Init(&SRAM_Handler, &Timing, NULL);
  /* ExtTiming */
        
//        //FMC¶áê±Dò¿ØÖƼÄ′æÆ÷
//        ReadTiming.AddressSetupTime=0x02;        //μØÖ·½¨á¢ê±¼ä(ADDSET)Îa15¸öHCLK 1/180M*15=5.5ns*15=82.5ns
//        ReadTiming.AddressHoldTime=0x00;
//        ReadTiming.DataSetupTime=0x03;           //êy¾Y±£′æê±¼ä(DATAST)Îa70¸öHCLK        =5.5*70=385ns
//        ReadTiming.AccessMode=FMC_ACCESS_MODE_A; //Ä£ê½A
//        //FMCD′ê±Dò¿ØÖƼÄ′æÆ÷
//        Timing.AddressSetupTime=0x02;            //μØÖ·½¨á¢ê±¼ä(ADDSET)Îa15¸öHCLK=82.5ns
//        Timing.AddressHoldTime=0x00;
//        Timing.DataSetupTime=0x03;               //êy¾Y±£′æê±¼ä(DATAST)Îa5.5ns*15¸öHCLK=82.5ns
//        Timing.AccessMode=FMC_ACCESS_MODE_A;     //Ä£ê½A
//        HAL_SRAM_Init(&SRAM_Handler,&ReadTiming,&Timing);               
}


static int FMC_Initialized = 0;

static void HAL_FMC_MspInit(void){
  /* USER CODE BEGIN FMC_MspInit 0 */

  /* USER CODE END FMC_MspInit 0 */
  GPIO_InitTypeDef GPIO_InitStruct;
  if (FMC_Initialized) {
    return;
  }
  FMC_Initialized = 1;
  /* Peripheral clock enable */
  __HAL_RCC_FMC_CLK_ENABLE();
  
  /** FMC GPIO Configuration  
  PF0   ------> FMC_A0
  PF1   ------> FMC_A1
  PF2   ------> FMC_A2
  PF3   ------> FMC_A3
  PF4   ------> FMC_A4
  PF5   ------> FMC_A5
  PF12   ------> FMC_A6
  PF13   ------> FMC_A7
  PF14   ------> FMC_A8
  PF15   ------> FMC_A9
  PG0   ------> FMC_A10
  PG1   ------> FMC_A11
  PE7   ------> FMC_D4
  PE8   ------> FMC_D5
  PE9   ------> FMC_D6
  PE10   ------> FMC_D7
  PD11   ------> FMC_A16
  PD12   ------> FMC_A17
  PD14   ------> FMC_D0
  PD15   ------> FMC_D1
  PG2   ------> FMC_A12
  PG3   ------> FMC_A13
  PG4   ------> FMC_A14
  PG5   ------> FMC_A15
  PD0   ------> FMC_D2
  PD1   ------> FMC_D3
  PD4   ------> FMC_NOE
  PD5   ------> FMC_NWE
  PG9   ------> FMC_NE2
  */
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
                          |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_12|GPIO_PIN_13
                          |GPIO_PIN_14|GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
                          |GPIO_PIN_4|GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

        GPIO_InitStruct.Pin = GPIO_PIN_9;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_PULLUP;
        GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_VERY_HIGH;             //¿ìËù  
        GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
        HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
  
  GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_14|GPIO_PIN_15
                          |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  /* USER CODE BEGIN FMC_MspInit 1 */

  /* USER CODE END FMC_MspInit 1 */
}

void HAL_SRAM_MspInit(SRAM_HandleTypeDef* hsram){
  /* USER CODE BEGIN SRAM_MspInit 0 */

  /* USER CODE END SRAM_MspInit 0 */
  HAL_FMC_MspInit();
  /* USER CODE BEGIN SRAM_MspInit 1 */

  /* USER CODE END SRAM_MspInit 1 */
}

static int FMC_DeInitialized = 0;

static void HAL_FMC_MspDeInit(void){
  /* USER CODE BEGIN FMC_MspDeInit 0 */

  /* USER CODE END FMC_MspDeInit 0 */
  if (FMC_DeInitialized) {
    return;
  }
  FMC_DeInitialized = 1;
  /* Peripheral clock enable */
  __HAL_RCC_FMC_CLK_DISABLE();
  
  /** FMC GPIO Configuration  
  PF0   ------> FMC_A0
  PF1   ------> FMC_A1
  PF2   ------> FMC_A2
  PF3   ------> FMC_A3
  PF4   ------> FMC_A4
  PF5   ------> FMC_A5
  PF12   ------> FMC_A6
  PF13   ------> FMC_A7
  PF14   ------> FMC_A8
  PF15   ------> FMC_A9
  PG0   ------> FMC_A10
  PG1   ------> FMC_A11
  PE7   ------> FMC_D4
  PE8   ------> FMC_D5
  PE9   ------> FMC_D6
  PE10   ------> FMC_D7
  PD11   ------> FMC_A16
  PD12   ------> FMC_A17
  PD14   ------> FMC_D0
  PD15   ------> FMC_D1
  PG2   ------> FMC_A12
  PG3   ------> FMC_A13
  PG4   ------> FMC_A14
  PG5   ------> FMC_A15
  PD0   ------> FMC_D2
  PD1   ------> FMC_D3
  PD4   ------> FMC_NOE
  PD5   ------> FMC_NWE
  PG9   ------> FMC_NE2
  */
  HAL_GPIO_DeInit(GPIOF, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
                          |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_12|GPIO_PIN_13
                          |GPIO_PIN_14|GPIO_PIN_15);

  HAL_GPIO_DeInit(GPIOG, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
                          |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_9);

  HAL_GPIO_DeInit(GPIOE, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10);

  HAL_GPIO_DeInit(GPIOD, GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_14|GPIO_PIN_15
                          |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5);

  /* USER CODE BEGIN FMC_MspDeInit 1 */

  /* USER CODE END FMC_MspDeInit 1 */
}

void HAL_SRAM_MspDeInit(SRAM_HandleTypeDef* hsram){
  /* USER CODE BEGIN SRAM_MspDeInit 0 */

  /* USER CODE END SRAM_MspDeInit 0 */
  HAL_FMC_MspDeInit();
  /* USER CODE BEGIN SRAM_MspDeInit 1 */

  /* USER CODE END SRAM_MspDeInit 1 */
}

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/**
  * @}
  */

/**
  * @}
  */
[/mw_shl_code]

[mw_shl_code=c,true]#include "sys.h"
#include "string.h"
#include "delay.h"
#include "usart.h"
#include "usart2.h"
#include "led.h"
#include "exti.h"
#include "timer.h"
#include "adc.h"
#include "mpu9250.h"
#include "sram.h"
#include "MS5611.h"//主函数中其他功能均可正常执行,为了测试都注释掉了,管脚检查过,没有其他功能复用
int main(void)
{
        u8 temp='c',temp2;
        u32 addr=0;u8 i=0;
        
        u8 a[30];
        
    HAL_Init();                     //3õê¼»ˉHAL¿a   
    Stm32_Clock_Init(180,12,2,8);   //éèÖÃê±Öó,180Mhz
    delay_init(90);                //3õê¼»ˉÑóê±oˉêy
    LED_Init();                     //3õê¼»ˉLED  
        
        uart1_init(115200);              //3õê¼»ˉUSART
//        Usart2_Init(19200);              //3õê¼»ˉUSART
        Usart3_Init(115200);
        //EXTI_Init();
//        TIM3_PWM_Init(500-1,90-1);      //90M/90=1MμļÆêyÆμÂ꣬×Ô¶ˉÖØ×°ÔØÎa500
//        ADC1_Init();
//        spi4_Init();

//        delay_ms(500);
//        Init_MPU9250();
//        PEout(4)=0;
//        InitAltimeter();
//        PGout(9) = 0;
        SRAM_Init();

               
    while(1)
    {
                LED4=0;
                delay_ms(200);
                LED4=1;
                delay_ms(200);
                addr = 0;
               
//                memset((u8*)(Bank1_SRAM_ADDR+addr),0xaa,10);
//                for(i=0;i<6;i++,addr++)
//                {
                        *((u8*)(Bank1_SRAM_ADDR+addr)) = 0xaa;
                        *((u8*)(Bank1_SRAM_ADDR+addr+1)) = 0xbb;
                        *((u8*)(Bank1_SRAM_ADDR+addr+2)) = 0xcc;
                        *((u8*)(Bank1_SRAM_ADDR+addr+3)) = 0xdd;
                        *((u8*)(Bank1_SRAM_ADDR+addr+4)) = 0xee;
                        *((u8*)(Bank1_SRAM_ADDR+addr+5)) = 0xff;
                        *((u8*)(Bank1_SRAM_ADDR+addr+6)) = 0x55;

//                        sprintf(a,"%X ",temp2);
                        
                        
//                        sprintf(a,"%X ",temp2);
                        //Usart_Send_Data(&USART3_Handler,&temp,1);
//                }
                a[0] = *((u8*)(Bank1_SRAM_ADDR+addr));
//delay_us(10);读写过程中不能有任意操作,否则后面数据读出的值不正确
                a[1] = *((u8*)(Bank1_SRAM_ADDR+addr+1));
                a[2] = *((u8*)(Bank1_SRAM_ADDR+addr+2));
                a[3] = *((u8*)(Bank1_SRAM_ADDR+addr+3));
                a[4] = *((u8*)(Bank1_SRAM_ADDR+addr+4));
                a[5] = *((u8*)(Bank1_SRAM_ADDR+addr+5));
                Usart_Send_Data(&USART3_Handler,a,6);
                delay_ms(1);
        }        
}
[/mw_shl_code]



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2014-8-21
在线时间
26 小时
 楼主| 发表于 2018-3-30 08:57:26 | 显示全部楼层
有人遇到过类似问题吗?
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-12-6
在线时间
4 小时
发表于 2019-7-25 11:44:11 | 显示全部楼层
你好,你的问题解决了么?可以讨论一下吗
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2020-2-4
在线时间
0 小时
发表于 2020-2-21 00:45:25 | 显示全部楼层
楼主解决了吗?我也遇到类似问题,FMC写数据时一切正常,但当读数据时,总线没有任何响应,包括NE,NOE以及数据线和地址线,都没有任何反应
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-20 18:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表