×

Внимание

Форум находится в режиме только для чтения.

STM32F4 управление WG320240 через интерфейс 8080

12 года 9 мес. назад #2419 от realqwerty
здравствуйте,
есть SM32F4DISCOVERY и дисплей WG320240CO (RA8835), имеет ли смысл завязываться по интерфейсу 8080 через FSMC микроконтроллера stm32f407vgt6 с использованием стандартных библиотек (из STM32F4xx_StdPeriph_Driver) или все таки проще отдельно "дергать ногами"?
12 года 9 мес. назад #2420 от Денис Ягов
В данный момент именно этим и занимаюсь. Подключаю через FSMC 8080.

Кроме того раньше на STM32F103 - по интерфейсу 8080 дёргал ногами (было всё неоптимально .... данные по нескольким портам раскиданы). Перепрорисовки больших объектов на экране - были видны, так что если дёргать - то одним портом.

На STM32F4 - будет невидно перепрорисовок по-всякому. Мощность процессора скроет "грехи" программера.

Однако через FSMC - красивее будет, чисто эстетически для программера. (бонусом - работу прорисовки сможет выполнить DMA практически без участия ядра)

Дёргать портами вручную - эстетически красивее для разводящего плату (при правильном выборе портов)

Думаю, таков выбор.  ;)

PS: Не уверен, что ответил на ваш вопрос.... но всё же  ::)
12 года 9 мес. назад - 12 года 9 мес. назад #2423 от realqwerty
ответ достаточно исчерпывающий, охота использовать возможности контроллера максимально эстетично.
есть пару вопросов:

1. вывод выбора регистра LCD RS нужно подключать к какому FSMC_Ax? (а то в 100 выводном корпусе вывод FMSC_A0 отсутствует)
2. при использовании 8-ми младших разрядов из шины FSMC_D, старшие разряды (15-8) возможно-ли использовать для других нужд?
12 года 9 мес. назад #2425 от Денис Ягов
ответ на вопрос номер 1.
К любому Ax. важно понимать, что когда вы отправляете команду на внешней шине адрева на выбраном вами Ax должен появится ноль. Когда вы отправляете данные на этой же линии должна быть 1. Например, в угоду 100 пиновому контроллеру принимаем Ax = A16. Т.е. команды шлём в адрес xxxxx00000, а данные  - в xxxxxxxx65536 (в аккурат, чтобы поднялась линия A16)

ответ 2. Можно. Для этого - настроить порты на другие функции (не FSMC).
12 года 9 мес. назад #2438 от realqwerty
запустил дисплей с использованием "дерганья ног", работает нормально.

пробую прикрутить через FSMC и DMA, по примеру (AN2790 TFT LCD interfacing with the high-density STM32F10xxx FSMC). крыша съехала при конфигурировании DMA (много изменений в библиотеках по сравнению с STM32F10xxx). Не могли бы Вы помочь примером для DISCOVERY?
12 года 9 мес. назад #2450 от Денис Ягов
Настройка DMA из примеров пользования библиотеками:

/* Enable DMA clock */
00131  RCC_AHB1PeriphClockCmd(DMA_STREAM_CLOCK, ENABLE);
00132 
00133  /* Reset DMA Stream registers (for debug purpose) */
00134  DMA_DeInit(DMA_STREAM);
00135
00136  /* Check if the DMA Stream is disabled before enabling it.
00137      Note that this step is useful when the same Stream is used multiple times:
00138      enabled, then disabled then re-enabled... In this case, the DMA Stream disable
00139      will be effective only at the end of the ongoing data transfer and it will
00140      not be possible to re-configure it before making sure that the Enable bit
00141      has been cleared by hardware. If the Stream is used only once, this step might
00142      be bypassed. */
00143  while (DMA_GetCmdStatus(DMA_STREAM) != DISABLE)
00144  {
00145  }
00146 
00147  /* Configure DMA Stream */
00148  DMA_InitStructure.DMA_Channel = DMA_CHANNEL; 
00149  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SRC_Const_Buffer; // вот тут адрес внешней памяти
00150  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DST_Buffer;  // вот тут адрес памяти ОЗУ
00151  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToMemory;
00152  DMA_InitStructure.DMA_BufferSize = (uint32_t)BUFFER_SIZE; // количество копирований
00153  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;
00154  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
00155  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; //размер копирования
00156  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
00157  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
00158  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
00159  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;       
00160  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
00161  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
00162  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
00163  DMA_Init(DMA_STREAM, &DMA_InitStructure);
00164   
00165  /* Enable DMA Stream Transfer Complete interrupt */
00166  DMA_ITConfig(DMA_STREAM, DMA_IT_TC, ENABLE);
00167
00168  /* DMA Stream enable */
00169  DMA_Cmd(DMA_STREAM, ENABLE);


Настраивается точно так же (ну или почти так же). Посмотрите в примерах применения библиотечных функций.  ;)
Время создания страницы: 0.038 секунд
Работает на Kunena форум