初级会员

- 积分
- 145
- 金钱
- 145
- 注册时间
- 2014-8-21
- 在线时间
- 26 小时
|
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]
|
|