реклама на сайте
подробности

 
 
> STM32H743 (NUCLEO-144) и FMC, не работает.
__inline__
сообщение Jul 4 2018, 10:19
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126



Пытаюсь завести контроллер внешней шины(FMC) на отладочной плате Nucleo-144 STM32H743.

Прицепил SRAM на 32 кБ, адресные биты посадил на GND, кроме самого младшего A0, который заведён на A16 микроконтроллера.

Делаю такой нехитрый тест:
CODE
int main(void)
{
// SCB_EnableICache();
// SCB_EnableDCache();

HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_FMC_Init();

// __disable_irq();

#define STATUS_REG (*(volatile unsigned char*) 0x60000000)
#define DATA_REG (*(volatile unsigned char*) 0x60010000)

u8 test1,test2,i=0;

while(1)
{
test1=i*i;

test2=(i+25)*(i+25);

i++;

STATUS_REG=test1;
DATA_REG=test2;

if((STATUS_REG!=test1)||(DATA_REG!=test2))
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_RESET);
while(1);
}
else
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_14);
delay_ms(1);
}
}

}


Если данные в двух ячейках не совпадают, то светодиод должен потухнуть и в вечный цикл. Если тест ОК, то светодиод быстро мерцает.

Так вот, при полностью исключенной SRAM тест успешен!

Верны ли вообще адреса для FMC : ?
(*(volatile unsigned char*) 0x60000000 и (*(volatile unsigned char*) 0x60010000 ? Складывается впечатление, что там другая периферия.


На всякий случай код инита GPIO и FMC (сгенерирован кубом и подправлен):
CODE
/* FMC initialization function */
void MX_FMC_Init(void)
{
FMC_NORSRAM_TimingTypeDef Timing;

/** Perform the SRAM1 memory initialization sequence
*/
hsram1.Instance = FMC_NORSRAM_DEVICE;
hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
/* hsram1.Init */
hsram1.Init.NSBank = FMC_NORSRAM_BANK1;
hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
hsram1.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_8;
hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
hsram1.Init.WriteFifo = FMC_WRITE_FIFO_ENABLE;
hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE;
/* Timing */
Timing.AddressSetupTime = 0; //15;
Timing.AddressHoldTime = 0; //15;
Timing.DataSetupTime = 6; //255;
Timing.BusTurnAroundDuration = 0; //15;
Timing.CLKDivision = 0; //16;
Timing.DataLatency = 0; //17;
Timing.AccessMode = FMC_ACCESS_MODE_A;
/* ExtTiming */

if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}

}

static uint32_t 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
PE7 ------> FMC_D4
PE8 ------> FMC_D5
PE9 ------> FMC_D6
PE10 ------> FMC_D7
PD11 ------> FMC_A16
PD14 ------> FMC_D0
PD15 ------> FMC_D1
PC7 ------> FMC_NE1
PD0 ------> FMC_D2
PD1 ------> FMC_D3
PD4 ------> FMC_NOE
PD5 ------> FMC_NWE
*/
/* 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_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF12_FMC;

HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

/* GPIO_InitStruct */
GPIO_InitStruct.Pin = GPIO_PIN_11|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_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF12_FMC;

HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

/* GPIO_InitStruct */
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_AF9_FMC;

HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

/* USER CODE BEGIN FMC_MspInit 1 */

/* USER CODE END FMC_MspInit 1 */
}


Сообщение отредактировал IgorKossak - Jul 12 2018, 06:20
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 22:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01349 секунд с 7
ELECTRONIX ©2004-2016