[STM32Generic] FSMC - SRAM

Пито
Вторник 09 мая 2017 11:27
Начинает связываться с FSMC (..снова) :)
В то время как в эпоху Libmaple я установил кучу в LD -файле как: __bss_end__ = _ebss; } >RAM PROVIDE ( _end = . ); PROVIDE(_lm_heap_start = 0x68000000); PROVIDE(_lm_heap_end = ALIGN(0x68000000 + 0x00080000 - 8 ,8)); /* Remove information from the standard libraries */ /DISCARD/ : { libc.a ( * )

victor_pv
Ср 10 мая 2017 г. 12:05
Я думаю, что STM, возможно, проделал половину работы уже в Hal MX.
Я нашел это в System_stm32f4xx.C: #if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM) #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ defined(STM32F469xx) || defined(STM32F479xx) /** * @brief Setup the external memory controller. * Called in startup_stm32f4xx.s before jump to main. * This function configures the external memories (SRAM/SDRAM) * This SRAM/SDRAM will be used as program data memory (including heap and stack). * @param None * @retval None */ ...

Пито
Ср 10 мая 2017 г. 12:21
Я создал материал в Cubemx с FSMC для F103.
Он не создает файл линкера, хотя.. РЕДАКТИРОВАТЬ: Это так, я пропустил некоторые части Cubemx..
Для F103 он создает базовую конфигурацию для GPIOS и FSMC и куча функций для доступа к внешнему SRAM.
Эти функции - это то, что мне не нужно, мне нужно сообщить компилятору/линкеру, что Malloc () и друзья должны использовать кучу, которая помещена во внешнее SRAM.
Легко, как пирог.. :)
Например, создается массив: uint32_t* EXRAM32 = (uint32_t*) malloc(n * sizeof(uint32_t));

victor_pv
Ср 10 мая 2017 г., 3:08
Пито написал:Я создал материал в Cubemx с FSMC для F103.
Он не создает файл линкера, хотя.. РЕДАКТИРОВАТЬ: Это так, я пропустил некоторые части Cubemx..
Для F103 он создает базовую конфигурацию для GPIOS и FSMC и куча функций для доступа к внешнему SRAM.
Эти функции - это то, что мне не нужно, мне нужно сообщить компилятору/линкеру, что Malloc () и друзья должны использовать кучу, которая помещена во внешнее SRAM.
Легко, как пирог.. :)
Например, создается массив: uint32_t* EXRAM32 = (uint32_t*) malloc(n * sizeof(uint32_t));

Chismicro
Ср 10 мая 2017 г. 5:27
Не могли бы вы привести весь пример или поместить его в качестве примера в репозиторий STM322ERIER?
Это был бы самый простой способ, которым люди могут его использовать ;)

Даниэфф
Ср 10 мая 2017 г., 6:07
Меня тоже интересует... для F7.

AG123
Ср 10 мая 2017 г., 6:51
возможно возиться с этим на досках Vet6? Добавление 128 тыс. Байтов сделает его 256 тыс. Байт SRAM, который чувствует себя достаточно, тогда есть еще еще 64 тыс : mrgreen:

Пито
Ср 10 мая 2017 г. 8:12
У меня все еще нет рабочего решения здесь.. Это беспорядок. Я должен сначала получить немного получения половины..
Что у меня есть, так это 512 КБ SRAM, припаянный на голубой плате F103ZET6, с NE3 CHIPSELECT, адрес 0x68000000, работал в прошлом. Это было намного проще с вещами F1 Libmaple, хотя..

Стивестронг
Чт 11 мая 2017 г. 8:55 утра
Пито написал:Это было намного проще с вещами F1 Libmaple, хотя..

Пито
Чт 11 мая 2017 г. 9:04
Сначала прочитайте этот блог http: // www.STM32duino.com/viewtopic.PHP?F = 28&T = 1651 :)

Самый простой способ - использовать внешний SRAM в качестве кучи. Это также самый быстрый вариант, так как штраф о скорости составляет около x2.5 макс.
Bank1 Region 3 с Blue Zet6 составляет 3, поэтому вы используете NE3, то есть базовый адрес 0x68000000.

Cubemx создает Для вас 3 функции (CS = NE3, SRAM, Data 16BITS, ADDR 18BITS, WATE DISABLE, BYTE Включение): static void MX_GPIO_Init(void); static void MX_FSMC_Init(void); HAL_SRAM_MspInit(SRAM_HandleTypeDef* hsram);

Пито
Чт 11 мая 2017 г. 10:54
Вернемся к этому ядро:
Cubemx также создает System_stm32f1xx.C Файл, который включает в себя FSMC init, эквивалентный Libmaple start_c.C один выше.
Я не знаю, как/где безопасно интегрировать его в ядро ​​Даниила, поэтому будет приветствуется подсказка..

Даниэфф
Чт 11 мая 2017 г. 11:04
Неудобно #define data_in_extsram в System_stm32f1xx.C, чтобы проверить. Позже мы можем поместить его в доски.txt build.Extra_flags.

SystemInit вызывается из _Startup, и с этим Define SystemInit_extmemctl.

Пито
Чт 11 мая 2017 12:39
Это то, что нужно изменить в Syscalls.C, чтобы взять на себя новую кучу старта/конец из сценария LD (предоставьте.. как указано выше):
/*---------------------------------------------------------------------------- * Exported variables *----------------------------------------------------------------------------*/ #undef errno extern int errno ; extern int _end ; /* If CONFIG_HEAP_START (or CONFIG_HEAP_END) isn't defined, then * assume _lm_heap_start (resp. _lm_heap_end) is appropriately set by * the linker */ #ifndef CONFIG_HEAP_START extern unsigned int _lm_heap_start; #define CONFIG_HEAP_START ((void *)&_lm_heap_start) #endif #ifndef CONFIG_HEAP_END extern unsigned int _lm_heap_end; #define CONFIG_HEAP_END ((void *)&_lm_heap_end) #endif /*---------------------------------------------------------------------------- * Exported functions *----------------------------------------------------------------------------*/ extern void _exit( int status ) ; extern void _kill( int pid, int sig ) ; extern int _getpid ( void ) ; extern caddr_t _sbrk(int incr) { static void * pbreak = NULL; /* current program break */ void * ret; if (pbreak == NULL) { pbreak = CONFIG_HEAP_START; } if ((CONFIG_HEAP_END - pbreak < incr) || (pbreak - CONFIG_HEAP_START < -incr)) { // errno = ENOMEM; <<< commented out by Pito as it throws it is not defined return (void *)-1; } ret = pbreak; pbreak += incr; return ret; } /** ORIGINAL _sbrk *extern caddr_t _sbrk ( int incr ) *{ * static unsigned char *heap = NULL ; * unsigned char *prev_heap ; * * if ( heap == NULL ) * { * heap = (unsigned char *)&_end ; * } * prev_heap = heap; * * heap += incr ; * * return (caddr_t) prev_heap ; *} */

Пито
Чт 11 мая 2017 г. 12:55
Пузырьковые сортировки 3000 случайных чисел:
Массивы, расположенные в куче во внутренней SRAM: Generating 3000 8bit uints: Checksum: 383933 BubbleSorting 8bit uints: Elapsed: 1189 msecs Generating 3000 16bit uints: Checksum: 99006717 BubbleSorting 16bit uints: Elapsed: 940 msecs Generating 3000 32bit uints: Checksum: 2798690133398 BubbleSorting 32bit uints: Elapsed: 1190 msecs

Пито
Чт 11 мая 2017 г. 13:27
Это должно продемонстрировать, что мы действительно работаем с кучей во внешней SRAM - 300 КБ переменных в общей сложности, выделенных в куче, размещенной во внешней SRAM (Blue F103ZET при 72 МГц, 256KX16 10NS SRAM): Allocating EXRAM8, EXRAM16, EXRAM32, EXRAM64 memory.. ******** Generating 20000 8bit uints: Checksum: 2556578 BubbleSorting 8bit uints: Elapsed: 106900 msecs 2x compare count: 0 2x rd and 2x wr count: 0 Checksum: 2556578 Sorted last 10 in ascending order: 19990 255 19991 255 19992 255 19993 255 19994 255 19995 255 19996 255 19997 255 19998 255 19999 255 ******** Generating 20000 16bit uints: Checksum: 656944195 BubbleSorting 16bit uints: Elapsed: 109857 msecs 2x compare count: 0 2x rd and 2x wr count: 0 Checksum: 656944195 Sorted last 10 in ascending order: 19990 65510 19991 65515 19992 65517 19993 65522 19994 65522 19995 65523 19996 65524 19997 65529 19998 65531 19999 65531 ******** Generating 20000 32bit uints: Checksum: 18681914029997 BubbleSorting 32bit uints: Elapsed: 146438 msecs 2x compare count: 0 2x rd and 2x wr count: 0 Checksum: 18681914029997 Sorted last 10 in ascending order: 19990 1999238604 19991 1999306563 19992 1999424184 19993 1999451338 19994 1999457766 19995 1999465354 19996 1999558287 19997 1999650861 19998 1999652871 19999 1999901586 ******** Generating 20000 64bit uints: Checksum: 111575624063623152 BubbleSorting 64bit uints: Elapsed: 236449 msecs 2x compare count: 0 2x rd and 2x wr count: 0 Checksum: 111575624063623152 Sorted last 10 in ascending order: 19990 11868698567724 19991 11868882412866 19992 11869207321128 19993 11869235688114 19994 11871884373798 19995 11872081464387 19996 11872393614036 19997 11873118183327 19998 11873121418992 19999 11873209577505

Пито
Чт 11 мая 2017 г. 18:38
Вот простая демонстрация Sort Sort - вы можете проверить свою внутреннюю / внешнюю кучу :)
Обновление 10.6.2017
Обновление 15.8.2017 - Комментарий HED, распечатать адрес начала Exram32 // Bubble Sort Demo in Heap // Pito c 5/2017, 6/2017, 8/2017 // Adjust the Array size such it fits into your Heap //#include //#include #include "Arduino.h" void setup() { delay(4000); // wait on USB // pinMode(PF9, OUTPUT); // digitalWrite(PF9, LOW); Serial.begin(115200); uint32_t n = 4000; // Number of uint32 elements uint32_t c, d, tmp, swap32, elapsed, i; uint64_t sum, sum1; Serial.println("Allocating EXRAM32 memory.."); /* EXRAM32 Initial memory allocation */ uint32_t* EXRAM32 = (uint32_t*) malloc(n * sizeof(uint32_t)); if (NULL == EXRAM32) { Serial.println(" ############### EXRAM32 MALLOC FAILED.."); //return -1; } Serial.println((uint32_t)EXRAM32); // 32bit sum = 0; sum1 = 0; randomSeed(3864); Serial.println("********"); Serial.print("Generating "); Serial.print(n); Serial.println(" 32bit uints:"); for (uint32_t i=0; i EXRAM32[d+1]) /* For decreasing order use < */ { swap32 = EXRAM32[d]; EXRAM32[d] = EXRAM32[d+1]; EXRAM32[d+1] = swap32; } } } elapsed = millis() - elapsed; Serial.print("Elapsed: "); Serial.print(elapsed); Serial.print(" "); Serial.println(" msecs"); sum = 0; for (uint32_t i=0; i

Даниэфф
Сб 13 мая 2017 г. 13:08
Я добавил Setheap (char *start, char *end) в Syscalls.c, так что варианты могут установить его.

Я добавил слабый preinitvariant () в system_stm32xxx.c, который называется до инициализации конструктора, поэтому варианты могут возиться с оперативной память. Здесь можно переместить кучу (с использованием предыдущей функции) или инициализировать данные / BS в RAM CCM, SRAM и другие вещи позже.

С этими возможностями для F7 в основном это: https: // github.com/danieleff/stm32gener ... 0B85341F63
  • Добавить data_in_extsdram в доски.текст. Вам нужно проверить STM32/System/STM32XX/HAL_SRC/SYSTER_STM32XXXX.c Что определить
  • Добавить preinitvariant () в вариант.CPP для перемещения кучи. Если вам не нравится SystemInit_extmemctl () по умолчанию. Позже это может быть использовано для инициализации дополнительных данных/BSS с помощью LDScript также.
Я также поместил пример наброска. AFAIK Единственная другая доска с внешней оперативной памятью в настоящее время - Discovery F429ZI. У меня его нет.

Примечание: есть также STM32XXXX_HAL_SDRAM.c Если кто -то не хочет работать с регистрами.

Zingg_jm
Пн июня 05, 2017, 17:26
Всем привет,

Кажется, я нашел правильную тему для следующего простого вопроса:

Существует ли пример, как инициализировать FSMC для использования с 1: SRAM, 2: TFT разъема FSMC в программе Arduino или в классе библиотеки C ++?

У меня есть плата STMF32F407ZET6 с 1MB Static Ram Chip на борту (Demo Poard E-Paper).
И у меня есть черные платы STM32F407VET6 и STM32F407ZET6 с разъемом FSMC TFT (до сих пор я использую бит)).

Эта тема указывает на ответ где -то есть, но вы можете помочь мне с некоторыми ссылками, спасибо.

Жан-Марк Зингг

Даниэфф
Вт, 06 июня 2017 г., 4:54
Эта ветка о моей реализации Arduino, а не Libmaple. У меня нет F4 с внешними компонентами FSMC, поэтому не могу привести рабочие примеры.

Для SRAM, если вы добавите -dData_in_extsram к доски.текст, он должен инициализировать в Bank1, который начинается с 0x60000000 (?). Проверьте с указателем, если вы можете написать/прочитать. (У вас есть ссылка на доску?)
Для TFT лучше всего попросить STM32Cubemx для создания кода настройки. Если вы все еще хотите спуститься таким образом, я могу дать больше указателей.

Zingg_jm
Вт, 06 июня 2017 г., 5:34 утра
Еще раз спасибо за ваш ответ, это действительно делает мне яснее.

Я понятия не имел, как этот раздел [STM32Generic] связан с 2 пакетами STM32 Arduino, которые я знаю.
Я только что искал FSMC.

В приведенном выше посте я нашел пример инициализации FSMC с использованием прямого доступа. Это то, что я ищу. Я постараюсь таким образом.

Мой вопрос связан с моим недавним постом о памяти, доступной для Arduino на STM32F707ZET6; В нем есть ссылка на доску DestM32-L.

http: // www.STM32duino.com/viewtopic.PHP ... = 50#P29154

Стивестронг
Втюд 06 июня 2017 г. 8:33 утра
Для Libmaple (Arduino_stm32) Core I реализовал FSMC для 16 -битного параллельного доступа LCD, как описано здесь.
Проверьте здесь эталон.

Zingg_jm
Вт, 06 июня 2017 г., 13:59
Стивестронг написал:Для Libmaple (Arduino_stm32) Core I реализовал FSMC для 16 -битного параллельного доступа LCD, как описано здесь.
Проверьте здесь эталон.

Даниэфф
Ср. 07, 2017 5:22 утра
Версия Steves это я думаю: https: // github.com/stevstrong/arduino_s ... ple/fsmc.час

Для STM32Generic я добавил пример к Примеры платы/blackf407/lowlevelhal/fsmclcd

Настройки настройки и инициализации выводов должны быть адаптированы к плате.

Отправка значений 65536 занимает 7 мс (я думаю, FIFO помогает петлю). Значения времени могут быть скорректированы с помощью Fsmc_norsram_timingtypedef Чтобы соответствовать периферийному.
fsmc.png
FSMC.PNG (54.19 киб) просмотрено 524 раза

Zingg_jm
Сб 10 июня 2017 г. 8:10
Спасибо всем.

Сначала мне пришлось еще раз решить свою путаницу в пакетах STM32: http: // www.STM32duino.com/viewtopic.PHP ... 401#P29401
Теперь я вижу хороший шанс начать использовать FSMC.

Пито
Сб 10 июня 2017 г. 10:49
@Daniel: Я начинаю связываться с Шрамом на черном 407Zet. Попытка использовать встроенный FSMC Init в \ System \ STM32F4 \ HAL_SRC \ SYSTEM_STM32F4XX.в.
Кажется, мы должны представить параметр, например, #define SRAM_SUBBANK x

Пито
Сб 10 июня 2017 г., 17:31
С моим «старым» над механизмом кучи он работает (нужно больше испытаний, возможно, CRC32 будет лучше), Black F407Zet 168 МГц, SRAM 256KX16, 10NS, с #define ADDSET 5 #define DATAST 5

Даниэфф
Сб 10 июня 2017 г., 17:40
Пито написал: Обновление: в варианте.CPP, я положил #include #include "stm32_gpio.h" #include "syscalls.h" extern "C" void preinitVariant() { //Set heap to external SRAM setHeap((unsigned char*)0x68000000, (unsigned char*)(0x68000000 + 512 * 1024)); }

Пито
Сб 10 июня 2017 г., 17:59
Это самая быстрая настройка, которая работает @168 МГц и с 10NS SRAM: #define ADDSET 1 #define DATAST 3

Пито
Сб 10 июня 2017 г., 18:07
И это с Black F407ZET при 240 МГц и SRAM 10NS, самая быстрая настройка, которая работает надежно, с #define ADDSET 1 #define DATAST 4

Zingg_jm
Вт 13 июня 2017 г. 9:51 утра
@Pito

Спасибо за советы, как и где можно включить FSMC SRAM на STM32F407ZET6. Я пытаюсь заставить его работать на демо-доске Destm32-L.

У меня есть 2 вопроса:

1. До сих пор я получаю странные результаты (см. Ниже), может ли это быть проблемой времени?

2. Я заказал «черную» плату STM32F407Zet6, у нее есть припоя на задней стороне для SRAM. Вы нашли такую ​​доску с паяной SRAM?

Спасибо.
// FMSC_SRAM_TEST #define FSMC_BANK1 ((void*)0x60000000) #define FSMC_NOR_PSRAM_REGION1 ((void*)0x60000000) // NE1 #define FSMC_NOR_PSRAM_REGION2 ((void*)0x64000000) // NE2 #define FSMC_NOR_PSRAM_REGION3 ((void*)0x68000000) // NE3 #define FSMC_NOR_PSRAM_REGION4 ((void*)0x6C000000) // NE4 #define FSMC_BANK2 ((void*)0x70000000) #define FSMC_BANK3 ((void*)0x80000000) #define FSMC_BANK4 ((void*)0x90000000) struct fmsc_sram_type { uint8_t test_buffer8[1000]; uint16_t test_buffer16[1000]; uint16_t test_buffer32[1000]; }; #define FMSC_SRAM ((fmsc_sram_type*)0x68000000) // NE3 PG10 on DESTM32-L void setup() { bool ok = true; Serial1.begin(115200); Serial1.println(); Serial1.println("FMSC_SRAM_TEST"); for (uint8_t i = 0; i < 100; i++) { FMSC_SRAM->test_buffer8[i] = i; FMSC_SRAM->test_buffer16[i] = i; FMSC_SRAM->test_buffer32[i] = i; } for (uint8_t i = 0; i < 100; i++) { ok = ok && (FMSC_SRAM->test_buffer8[i] == i); if (FMSC_SRAM->test_buffer8[i] != i) { uint8_t v = FMSC_SRAM->test_buffer8[i]; uint8_t v2 = FMSC_SRAM->test_buffer8[i]; Serial1.print("(8) ? "); Serial1.print(i); Serial1.print(" : "); Serial1.print(v); Serial1.print(" : "); Serial1.println(v2); } } Serial1.println(ok ? "ok" : "not ok"); for (uint8_t i = 0; i < 100; i++) { ok = ok && (FMSC_SRAM->test_buffer16[i] == i); if (FMSC_SRAM->test_buffer16[i] != i) { uint16_t v = FMSC_SRAM->test_buffer16[i]; uint16_t v2 = FMSC_SRAM->test_buffer16[i]; Serial1.print("(16) ? "); Serial1.print(i); Serial1.print(" : "); Serial1.print(v); Serial1.print(" : "); Serial1.println(v2); } } Serial1.println(ok ? "ok" : "not ok"); for (uint8_t i = 0; i < 100; i++) { ok = ok && (FMSC_SRAM->test_buffer32[i] == i); if (FMSC_SRAM->test_buffer32[i] != i) { uint16_t v = FMSC_SRAM->test_buffer32[i]; uint16_t v2 = FMSC_SRAM->test_buffer32[i]; Serial1.print("(32) ? "); Serial1.print(i); Serial1.print(" : "); Serial1.print(v); Serial1.print(" : "); Serial1.println(v2); } } Serial1.println(ok ? "ok" : "not ok"); } void loop() { }

ZMEMW16
Вт 13 июня 2017 г. 9:54 утра
У вас есть выбор, чтобы сделать :)
http: // www.STM32duino.com/viewtopic.PHP?f = 3&T = 2159
Нет, я еще не видел черного ветеринара/Zet/ZGT с SRAM, установленным
SRP

Пито
Вт 13 июня 2017 г. 10:42
У меня есть 2 вопроса:
1. До сих пор я получаю странные результаты (см. Ниже), может ли это быть проблемой времени?
2. Я заказал «черную» плату STM32F407Zet6, у нее есть припоя на задней стороне для SRAM. Вы нашли такую ​​доску с паяной SRAM?
1. Какова ваша настройка времени?
2. Нет, я получил черную доску 407zet6 и припаянный в SRAM (256KX16, 10NS Part), она отлично работает.
Вы должны припаять 2x 100n 0603 SMD -керамические конденсаторы и 10K резисторов на колодках там также..

Zingg_jm
Вт 13 июня 2017 г. 11:18
@Pito

Отлично, спасибо, теперь это работает!

Я только что изменился на:

#define addset 5
#define Datast 5

Я посмотрю на характеристики моего SRAM и значение (регистрация битов) этих значений позже. Скорость выполнения не является проблемой для моей электронной бумаги.

Жан-Марк

Пито
Вт 13 июня 2017 г. 11:26
Для 10NS SRAM A = 1, D = 3 отлично работает здесь на 168 МГц FCPU.
Для 55NS SRAM вы должны экспериментировать, я бы начал с A = 15, D = 15, а затем снизился, пока не возникнут проблемы.
Вы можете использовать демонстрацию Buble Sort в этой теме для экспериментов.

ZMEMW16
Вт 13 июня 2017 12:07
Пито написал: Вы должны припаять 2x 100n 0603 SMD -керамические конденсаторы и 10K резисторов на колодках там также..

Пито
Вт 13 июня 2017 г. 13:34
Я паял 15K 0805 (он подходит) там, и он работает нормально.
15K.JPG
15k.JPG (25.13 киб) просмотрено 396 раз

ZMEMW16
Вт 13 июня 2017 г. 15:29
Aarrrhhhh & c, потерянный в стеке.

ты сделал мой день с фотографиями, хотя

Стивен

Пито
Вт 13 июня 2017 г., 19:28
Это воспоминание о приповне довольно просто. Вам нужно много потока припоя, чтобы положить на штифты (сначала - сделайте центр упаковки на подушечках и почините его с помощью оловянных каплей на углах, не заботятся о шортах на этом этапе), а затем просто запустите железный наконечник ( олова) медленно через булавки слева направо, олово находит сами подушки. Напоминания о олова (между булавками рядом с упаковкой), если таковые имеются, могут быть легко удалены путем падения медного фитиля (как последний шаг). Хитрость здесь состоит в том, чтобы использовать много потока, пакет должен плавать в море потока :)

ZMEMW16
Вт 13 июня 2017 г., 8:03 вечера
Кстати, Flux - отличный растворитель, чтобы погрузиться в пастовую пасту в жизнь, а также хороший переполох
помогает узнать согласованность оригинала при получении.

У YouTube на «SMD Sploring Tutorials» есть этот парень, я уже подписан :)
Несколько о перетаскивании пайки
https: // www.YouTube.com/user/jkgamm041/ ... ity_view = 3

Стивен

Пито
Ср. 5 июля 2017 г. 13:32
@daniel:
Могло бы сделать void SystemInit_ExtMemCtl(void)

Даниэфф
Ср. 5 июля 2017 г., 17:50
В System_stm32xxxx.c Существует слабый `preinitvariant ()` stice ниже `systeminit_extmemctl ()` только для этого, чтобы варианты могли переопределить его.
Если DATA_IN_EXTSRAM не определен, SystemInit_extmemctl () даже не скомпилируется в.

Пито
Ср. 05 июля 2017 г. 18:18
Я сделал это:
вариант.в #include "stm32_build_defines.h" #include "stm32_def.h" #define DATA_IN_ExtSRAM #define ADDSET 0 // #define DATAST 1 // extern void preinitVariant() { //Set heap to external SRAM setHeap((unsigned char*)0x68000000, (unsigned char*)(0x68000000 + 512 * 1024)); } void SystemInit_ExtMemCtl(void) { __IO uint32_t tmpreg; /* FSMC Bank1 NOR/SRAM3 is used for Blue F103ZET and Black F407ZET */ blah blah blah } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInit; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.LSEState = RCC_LSE_OFF; ....

Zingg_jm
Вт 11 июля 2017 г. 6:31
[Zingg_jm - Пн июня 05, 2017, 17:26] - Всем привет,

Кажется, я нашел правильную тему для следующего простого вопроса:

Существует ли пример, как инициализировать FSMC для использования с 1: SRAM, 2: TFT разъема FSMC в программе Arduino или в классе библиотеки C ++?

У меня есть плата STMF32F407ZET6 с 1MB Static Ram Chip на борту (Demo Poard E-Paper).
И у меня есть черные платы STM32F407VET6 и STM32F407ZET6 с разъемом FSMC TFT (до сих пор я использую бит)).

Эта тема указывает на ответ где -то есть, но вы можете помочь мне с некоторыми ссылками, спасибо.

Жан-Марк Зингг
Привет, STM32 Друзья,

Теперь я решил также #2, FSMC TFT Connection. Я добавил классы FSMC IO в мою библиотеку GXTFT Arduino, как для пакетов STM32 STM32GENERIER, так и для STM32DUINO.

https: // github.com/zinggjm/gxtft http: // форум.Ардуино.CC/INDEX.PHP?Тема = 488605.0

Жан-Марк

Стивестронг
Вт 11 июля 2017 г. 8:39
Жан-Марка, вы используете Libmaple FSMC (ViewTopic.PHP?F = 39&T = 1976&P = 26166#P26166)?

Zingg_jm
Вт 11 июля 2017 г. 10:06 утра
[Стивестронг - Вт 11 июля 2017 г. 8:39 утра] - Жан-Марка, вы используете Libmaple FSMC (ViewTopic.PHP?F = 39&T = 1976&P = 26166#P26166)?
Я не до конца понимаю ваш вопрос, но постараюсь дать некоторый ответ.

Доска, которую я использую, - это черный STM32F407VET6 от ACELEC:
https: // www.aliexpress.com/item/free-sh ... 22721.HTML
Ссылки также в заголовках моих библиотечных источников.
У меня есть 2 версии: // this version is for use with Arduino package STM32GENERIC, board "BLACK F407VE/ZE/ZG boards". // https://github.com/danieleff/STM32GENERIC

Стивестронг
Вторник 11 июля 2017 г. 13:34
Надеюсь, вы не будете смешивать эти два разных ядра.

Я просто хотел указать на это для ядра Libmaple (https: // github.com/rogerclarkmelbourne/arduino_stm32) уже включена поддержка FSMC для ЖК -дисплея.

Zingg_jm
Вторник 11 июля 2017 г. 14:58
[Стивестронг - Вторник 11 июля 2017 г. 13:34] - Надеюсь, вы не будете смешивать эти два разных ядра.

Я просто хотел указать на это для ядра Libmaple (https: // github.com/rogerclarkmelbourne/arduino_stm32) уже включена поддержка FSMC для ЖК -дисплея.
Отлично, спасибо, моя путаница в различных пакетах STM32 разрешена, в основном.
Пакеты находятся в постоянной эволюции, e.глин. Мне просто нужно было вернуться к более старому пакету STM32Duino, aka arduino_stm32 (разные имена в разных местах, не просто для пользователей), из -за проблем с компиляцией (для F1, насколько я помню).

Я добавляю здесь ссылку в вашу библиотеку: https: // github.com/stevstrong/adafruit_ ... 6bit_stm32, Таким образом, у других меньше проблемы, чтобы узнать, о чем вы пишете.

Я попробую вашу библиотеку со своей доской и отображением. Знаете ли вы о других дисплеях с тем же разъемом и рутинкой?

Спасибо

Жан-Марк

Стивестронг
Вт 11 июля 2017 г. 15:38
Я не обращаю внимания на разъемы, чтобы быть совместимыми с платами контроллеров, потому что я не использую стандартные »платы Arduino, просто используя провода для подключения моих плат STM32 к ЖК -доскам.

Zingg_jm
Вт 11 июля 2017 г. 15:46
[Даниэфф - Ср. 07, 2017 5:22] - Версия Steves это я думаю: https: // github.com/stevstrong/arduino_s ... ple/fsmc.час
...
Или это эта ссылка, которая больше не работает (больше)?

Zingg_jm
Вт 11 июля 2017 г. 15:53
[Стивестронг - Вт 11 июля 2017 г. 15:38] - Я не обращаю внимания на разъемы, чтобы быть совместимыми с платами контроллеров, потому что я не использую стандартные »платы Arduino, просто используя провода для подключения моих плат STM32 к ЖК -доскам.
У меня есть некоторый опыт работы с проводами DuPont для параллельных интерфейсов TFTS. Отладка проводки для меня сложнее, чем отладка SW, если только проводка не является прямой параллель.

Разъем FSMC TFT на черных досках является таким желанным соединением; К сожалению, кажется, только один непосредственно соответствующий TFT.

Стивестронг
Вт 11 июля 2017 г., 17:58
Моя версия доступна из: https: // github.com/stevstrong/arduino_stm32/
Для получения общей информации о разработке для Libmaple F4 Проверьте этот пост: http: // www.STM32duino.com/viewtopic.PHP?F = 39&T = 1976

Вы можете легко сделать плату адаптера для любой ЖК-платы, используя дополнительную полосовую доску и несколько разъемов.

Zingg_jm
Вторник 11 июля 2017 г. 18:03
Прямые ссылки на мой код TFT FSMC:

"// GitHub.com/zinggjm/gxtft/blob/master/gxio/stm32generic/gxio_stm32f4_fsmc/gxio_stm32f4_fsmc.CPP "
https: // github.com/zinggjm/gxtft/blob/m ... 4_FSMC.CPP
"// GitHub.com/zinggjm/gxtft/blob/master/gxio/stm32duino/gxio_stm32f4_fsmc/gxio_stm32f4_fsmc.CPP "
https: // github.com/zinggjm/gxtft/blob/m ... 4_FSMC.CPP

"// GitHub.com/zinggjm/gxtft/blob/master/gxio/stm32generic/gxio_stm32f1_fsmc/gxio_stm32f1_fsmc.CPP "
https: // github.com/zinggjm/gxtft/blob/m ... 1_FSMC.CPP
"// GitHub.com/zinggjm/gxtft/blob/master/gxio/stm32duino/gxio_stm32f1_fsmc/gxio_stm32f1_fsmc.CPP "
https: // github.com/zinggjm/gxtft/blob/m ... 1_FSMC.CPP

может не быть актуальным, но показывает низкий уровень доступа, который я использую.

ZMEMW16
Вт 11 июля 2017 г., 19:33
Они не; Многие доски имеют 32, 34, 40, даже разъемы 50 Вт.
Каждый из них является стандартом для кого -то, они становятся намеревающимися что -то установить, но не обязательно. :)

Серия синих досок CZ_MINI составляет около 3, может быть, 4 версии, с SD/без, с DB9/без, без/без разъема отображения, в основном заголовка (в основном для меня) или гнезда (1 я думаю).

Я обнаружил, что некоторые дисплеи, которые я купил некоторое время назад, думая, что они в порядке для синего CZ; И что впоследствии я никогда не смогу обнаружить совместимую доску для их использования, блестяще сочетать с черным ZE.
Мне пришлось физически предложить один на другой, с переводом, чтобы указать булавки в гнездо и вращаться, чтобы выстроить вывод один; Тогда я мог «увидеть» имена управления подключения, фактически соответствующие, а затем я посмотрел остальные, чтобы проверить.

Я обнаружил, что идея магазина AliexPress явно рекламирует совместимый дисплей в деталях самой черной доски, довольно освежающе умно.
Еще лучше, когда вы обнаружите, что черный VE/ZE/ZGT не так тонко разные, Header V Socket, 32 Way V 34 Way, FSMC A10/A18; ne1 v ne4 и остальные ??
Меня не удивило бы, если бы это было на самом деле подключения к фишкам, которые управляют этими изменениями.

Шелковый скрининг также раздражает, обычно у платы будут имена PANN - PGNN, а дисплей будет иметь обозначения FSMC, RD, RS, WR, NWE, DB0..DB15
Если вы посмотрите на схему Black ZG, они оба перечислены в разделе Disp. Только время, когда я это видел (подумайте, проверьте VE/Ze Scematics)

Конечно, тогда может быть NE1 .. NE4, SRAM, LCD и т. Д
«Шаблоны» / «Стандартизировать» им что -то вроде кошмара, на самом деле просто выясняя, что связано с тем, что также кажется одним из них.

Стивен

Zingg_jm
Ср. 12 июля 2017 г., 4:05
[Стивестронг - Вторник 11 июля 2017 г. 17:58] - Моя версия доступна из: https: // github.com/stevstrong/arduino_stm32/
Для получения общей информации о разработке для Libmaple F4 Проверьте этот пост: http: // www.STM32duino.com/viewtopic.PHP?F = 39&T = 1976

Вы можете легко сделать плату адаптера для любой ЖК-платы, используя дополнительную полосовую доску и несколько разъемов.
Спасибо. В сочетании с содержанием ссылки Даниэффа я нашел информацию, которую я искал:

https: // github.com/stevstrong/arduino_s ... ple/fsmc.час
https: // github.com/stevstrong/arduino_s ... ple/fsmc.в