- Главная
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- STM32F4 управление WG320240 через интерфейс 8080
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- STM32F4 управление WG320240 через интерфейс 8080
STM32F4 управление WG320240 через интерфейс 8080
- realqwerty
- Автор темы
- Посетитель
12 года 9 мес. назад #2419
от realqwerty
realqwerty создал тему: STM32F4 управление WG320240 через интерфейс 8080
здравствуйте,
есть SM32F4DISCOVERY и дисплей WG320240CO (RA8835), имеет ли смысл завязываться по интерфейсу 8080 через FSMC микроконтроллера stm32f407vgt6 с использованием стандартных библиотек (из STM32F4xx_StdPeriph_Driver) или все таки проще отдельно "дергать ногами"?
есть SM32F4DISCOVERY и дисплей WG320240CO (RA8835), имеет ли смысл завязываться по интерфейсу 8080 через FSMC микроконтроллера stm32f407vgt6 с использованием стандартных библиотек (из STM32F4xx_StdPeriph_Driver) или все таки проще отдельно "дергать ногами"?
- Денис Ягов
- Посетитель
12 года 9 мес. назад #2420
от Денис Ягов
Денис Ягов ответил в теме Re: STM32F4 управление WG320240 через интерфейс 8080
В данный момент именно этим и занимаюсь. Подключаю через FSMC 8080.
Кроме того раньше на STM32F103 - по интерфейсу 8080 дёргал ногами (было всё неоптимально .... данные по нескольким портам раскиданы). Перепрорисовки больших объектов на экране - были видны, так что если дёргать - то одним портом.
На STM32F4 - будет невидно перепрорисовок по-всякому. Мощность процессора скроет "грехи" программера.
Однако через FSMC - красивее будет, чисто эстетически для программера. (бонусом - работу прорисовки сможет выполнить DMA практически без участия ядра)
Дёргать портами вручную - эстетически красивее для разводящего плату (при правильном выборе портов)
Думаю, таков выбор.
PS: Не уверен, что ответил на ваш вопрос.... но всё же :
Кроме того раньше на STM32F103 - по интерфейсу 8080 дёргал ногами (было всё неоптимально .... данные по нескольким портам раскиданы). Перепрорисовки больших объектов на экране - были видны, так что если дёргать - то одним портом.
На STM32F4 - будет невидно перепрорисовок по-всякому. Мощность процессора скроет "грехи" программера.
Однако через FSMC - красивее будет, чисто эстетически для программера. (бонусом - работу прорисовки сможет выполнить DMA практически без участия ядра)
Дёргать портами вручную - эстетически красивее для разводящего плату (при правильном выборе портов)
Думаю, таков выбор.
PS: Не уверен, что ответил на ваш вопрос.... но всё же :
- realqwerty
- Автор темы
- Посетитель
12 года 9 мес. назад - 12 года 9 мес. назад #2423
от realqwerty
realqwerty ответил в теме Re: STM32F4 управление WG320240 через интерфейс 8080
ответ достаточно исчерпывающий, охота использовать возможности контроллера максимально эстетично.
есть пару вопросов:
1. вывод выбора регистра LCD RS нужно подключать к какому FSMC_Ax? (а то в 100 выводном корпусе вывод FMSC_A0 отсутствует)
2. при использовании 8-ми младших разрядов из шины FSMC_D, старшие разряды (15- возможно-ли использовать для других нужд?
есть пару вопросов:
1. вывод выбора регистра LCD RS нужно подключать к какому FSMC_Ax? (а то в 100 выводном корпусе вывод FMSC_A0 отсутствует)
2. при использовании 8-ми младших разрядов из шины FSMC_D, старшие разряды (15- возможно-ли использовать для других нужд?
Последнее редактирование: 12 года 9 мес. назад пользователем .
- Денис Ягов
- Посетитель
12 года 9 мес. назад #2425
от Денис Ягов
Денис Ягов ответил в теме Re: STM32F4 управление WG320240 через интерфейс 8080
ответ на вопрос номер 1.
К любому Ax. важно понимать, что когда вы отправляете команду на внешней шине адрева на выбраном вами Ax должен появится ноль. Когда вы отправляете данные на этой же линии должна быть 1. Например, в угоду 100 пиновому контроллеру принимаем Ax = A16. Т.е. команды шлём в адрес xxxxx00000, а данные - в xxxxxxxx65536 (в аккурат, чтобы поднялась линия A16)
ответ 2. Можно. Для этого - настроить порты на другие функции (не FSMC).
К любому Ax. важно понимать, что когда вы отправляете команду на внешней шине адрева на выбраном вами Ax должен появится ноль. Когда вы отправляете данные на этой же линии должна быть 1. Например, в угоду 100 пиновому контроллеру принимаем Ax = A16. Т.е. команды шлём в адрес xxxxx00000, а данные - в xxxxxxxx65536 (в аккурат, чтобы поднялась линия A16)
ответ 2. Можно. Для этого - настроить порты на другие функции (не FSMC).
- realqwerty
- Автор темы
- Посетитель
12 года 9 мес. назад #2438
от realqwerty
realqwerty ответил в теме Re: STM32F4 управление WG320240 через интерфейс 8080
запустил дисплей с использованием "дерганья ног", работает нормально.
пробую прикрутить через FSMC и DMA, по примеру (AN2790 TFT LCD interfacing with the high-density STM32F10xxx FSMC). крыша съехала при конфигурировании DMA (много изменений в библиотеках по сравнению с STM32F10xxx). Не могли бы Вы помочь примером для DISCOVERY?
пробую прикрутить через FSMC и DMA, по примеру (AN2790 TFT LCD interfacing with the high-density STM32F10xxx FSMC). крыша съехала при конфигурировании DMA (много изменений в библиотеках по сравнению с STM32F10xxx). Не могли бы Вы помочь примером для DISCOVERY?
- Денис Ягов
- Посетитель
12 года 9 мес. назад #2450
от Денис Ягов
Денис Ягов ответил в теме Re: STM32F4 управление WG320240 через интерфейс 8080
Настройка 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);
Настраивается точно так же (ну или почти так же). Посмотрите в примерах применения библиотечных функций.
/* 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);
Настраивается точно так же (ну или почти так же). Посмотрите в примерах применения библиотечных функций.
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- STM32F4 управление WG320240 через интерфейс 8080
Время создания страницы: 0.041 секунд