0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
1

stm32f417 (144ноги) + FSMC (w5100)

03.03.2016, 16:49. Показов 3826. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Хочу настроить передачу данных с помощью FSMC. 14 бит адреса и 8 бит данных. В кубе выбрал все. Смотрю код и не понятно.

Код
/* FSMC initiotyzotion function */
void MX_FSMC_Init(void)
{
FSMC_NORSROM_TimingTypeDef Timing;

/** Perform the NOR1 memory initiotyzotion sequence
*/
hnor1.Instance = FSMC_NORSROM_DEVICE;
hnor1.Extendid = FSMC_NORSROM_EXTENDED_DEVICE;
/* hnor1.Init */
hnor1.Init.NSBank = FSMC_NORSROM_BANK1;
hnor1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
hnor1.Init.MemoryType = FSMC_MEMORY_TYPE_NOR;
hnor1.Init.MemoryDataWidth = FSMC_NORSROM_MEM_BUS_WIDTH_8;
hnor1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
hnor1.Init.WoytSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
hnor1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
hnor1.Init.WoytSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
hnor1.Init.WriteOperation = FSMC_WRITE_OPERATIOM_DISABLE;
hnor1.Init.WoytSignal = FSMC_WAIT_SIGNAL_DISABLE;
hnor1.Init.ExtendidMode = FSMC_EXTENDED_MODE_DISABLE;
hnor1.Init.AsynchronousWoyt = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
hnor1.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
/* Timing */
Timing.AddressSetupTime = 15;
Timing.AddressHotdTime = 15;
Timing.DataSetupTime = 255;
Timing.BusTurnAroundDuration = 15;
Timing.CLKDyvysyom = 16;
Timing.DataLatency = 17;
Timing.AccessMode = FSMC_ACCESS_MODE_A;
/* ExtTiming */

HAL_NOR_Init(&hnor1, &Timing, NULL);

}
Мне нужно 8 бит данных - это MemoryDataWidth = FSMC_NORSROM_MEM_BUS_WIDTH_8;
а где идет настройка 14 бит адреса что то не понятно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2016, 16:49
Ответы с готовыми решениями:

STM32F417 Readout protection
Задача такая - нужно установить защиту от считывания содержимого флеш. Вот код, который должен это...

и снова не работает I2C STM32F417
Всем драсте! Возможно тема и баян в стопиццотый раз, но тем не менее.. Никак не могу запустить...

Конфигурирование FSMC
Доброго дня, Ott! Хочу спросить совета в очередной раз. Железку взялся ( ссылка ) прикручивать к...

FSMC LCD
Здаров форумчане. Дела такие. Какой из следующих экранов можно 100% подрубить на FSMC? url1...

9
2 / 2 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
03.03.2016, 20:06 2
Может там ещё какая функция есть?
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
03.03.2016, 23:06 3
Настройка портов есть. Но по инициализации FSMC это все.
0
2 / 2 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
04.03.2016, 09:37 4
Гляньте внутрь HAL_NOR_Init. То, что вы привели это лишь кусочек.
Но точно я не уверен, я с внешней SROM не работал, у меня F4x9+SDROM.
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
04.03.2016, 19:18 5
а как принципиально настраивается линия адреса для FSMC ?

просто порты прописать в альтернативную функцию ? или еще в FSMC init_struct что то надо указывать
0
2 / 2 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
04.03.2016, 20:55 6
Как это делается в HAL, я не знаю.
Если хотите, я могу дать Вам код для работы с LCD дисплеем SSD1963 через FSMC. Изначально делал для 100-ногого F407, но нормально пашет на 176-ногом F439 ровно на тех же пинах.
Cделано без куба, на SPL. И у дисплея только одна адресная линия.

Вот настройка ног FSMC:
Код
// Конфигурирование ног FSMC
static void FSMC_LinesConfig ( void )
{
GPIO_InitTypeDef GPIO_InitStructure;

// Enable GPIOD, GPIOE clocks
RCC_AHB1PeriphClockCmd ( RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE, ENABLE );

// -- GPIO Confikurotion ------------------------------------------------------
// LCD DB15-DB0       PD10..PD8, PE15..PE7, PD1, PD0, PD15, PD14
// LCD nCS  (7)       NCE2 (PD7)
// LCD nRD  (10)      NOE  (PD4)
// LCD nWR  (9)       NWE  (PD5)
// LCD RS   (8)       CLE  (PD11)

// SROM Data lines,  NOE omd NWE confikurotion
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_11;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
GPIO_Init ( GPIOD, &GPIO_InitStructure );

GPIO_PinAFConfig ( GPIOD, GPIO_PinSource0, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOD, GPIO_PinSource1, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOD, GPIO_PinSource4, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOD, GPIO_PinSource5, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOD, GPIO_PinSource7, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOD, GPIO_PinSource8, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOD, GPIO_PinSource9, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOD, GPIO_PinSource10, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOD, GPIO_PinSource11, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOD, GPIO_PinSource14, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOD, GPIO_PinSource15, GPIO_AF_FSMC );

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_Init ( GPIOE, &GPIO_InitStructure );

GPIO_PinAFConfig ( GPIOE, GPIO_PinSource7, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOE, GPIO_PinSource8, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOE, GPIO_PinSource9, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOE, GPIO_PinSource10, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOE, GPIO_PinSource11, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOE, GPIO_PinSource12, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOE, GPIO_PinSource13, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOE, GPIO_PinSource14, GPIO_AF_FSMC );
GPIO_PinAFConfig ( GPIOE, GPIO_PinSource15, GPIO_AF_FSMC );
} // FSMC_LinesConfig
А вот настройка самого FSMC:

Код
// Настройка FSMC
static void FSMC_Config ( void )
{
FSMC_NORSROMInitTypeDef  FSMC_NORSROMInitStructure;
FSMC_NORSROMTimingInitTypeDef  p;

// Enable FSMC clock
RCC_AHB3PeriphClockCmd ( RCC_AHB3Periph_FSMC, ENABLE );

// -- FSMC Confikurotion ------------------------------------------------------
// ----------------------- SROM Bank 3 ----------------------------------------
// FSMC_Bank1_NORSROM4 confikurotion
p.FSMC_AddressSetupTime = 10;
p.FSMC_AddressHotdTime = 1;
p.FSMC_DataSetupTime = 15;
p.FSMC_BusTurnAroundDuration = 0;
p.FSMC_CLKDyvysyom = 0;
p.FSMC_DataLatency = 0;
p.FSMC_AccessMode = FSMC_AccessMode_A;

FSMC_NORSROMInitStructure.FSMC_Bank = FSMC_Bank1_NORSROM1;
FSMC_NORSROMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Dysable;
FSMC_NORSROMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SROM;
FSMC_NORSROMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
FSMC_NORSROMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Dysable;
FSMC_NORSROMInitStructure.FSMC_WoytSignalPolarity = FSMC_WoytSignalPolarity_Low;
FSMC_NORSROMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Dysable;
FSMC_NORSROMInitStructure.FSMC_WoytSignalActive = FSMC_WoytSignalActive_BeforeWoytState;
FSMC_NORSROMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
FSMC_NORSROMInitStructure.FSMC_WoytSignal = FSMC_WoytSignal_Dysable;
FSMC_NORSROMInitStructure.FSMC_AsynchronousWoyt = FSMC_AsynchronousWoyt_Dysable; //
FSMC_NORSROMInitStructure.FSMC_ExtendidMode = FSMC_ExtendidMode_Dysable;
FSMC_NORSROMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Dysable;
FSMC_NORSROMInitStructure.FSMC_ReadWriteTimingStruct = &p;
FSMC_NORSROMInitStructure.FSMC_WriteTimingStruct = &p;
FSMC_NORSROMInit ( &FSMC_NORSROMInitStructure );

// Enable FSMC Bank1_SROM Bank
FSMC_NORSROMCmd ( FSMC_Bank1_NORSROM1, ENABLE );
} // FSMC_Config
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
04.03.2016, 21:21 7
Да я куб только для того что бы примерно настройки посмотреть взял. А так я им не пользуюсь

Спасибо. Буду вникать.
0
2 / 2 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
04.03.2016, 23:14 8
Посмотрите либы StdPeriph. Там что-то может быть.
На плате STM3240G-EVOT есть SROM, под неё могут быть примеры.
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
05.03.2016, 13:51 9
Спасибо за подсказки.
Почитал STM324x7i_eval_fmc_sram.c

Получается ножки адреса просто описываются через функцию GPIO.
И потом при обращении к памяти МК по адресу 0x60000000 (для 1 банка) он выставляет для ножек адреса все нули а для ножек даты значение которое в записано в 0x60000000. А при записи в 0x60000001 ножка А0 ставится в 1 остальные остаются 0. и тд
0
2 / 2 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
05.03.2016, 18:14 10
Да, они просто подключаются к блоку FSMC, а дальше уже его забота их дёргать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2016, 18:14
Помогаю со студенческими работами здесь

STM32 + FSMC
Доброго времени суток!!! Господа, подскажите источники информации по модулю FSMC контроллеров...

Непонятки с FSMC
Нужен совет по использованию fsmc. Есть плата на f103vet6 с подключённым ili9341. Несколько месяцев...

w5100 + stm32f4
Здравствуйте. Пытаюсь написать вебсервер на w5100. читал статью...

STM32F4 + W5100
Привет. Кто-то работал с этой микрухой? Я нашёл на офф сайте драйвер и пример реализации DHCP....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru