Есть дисплей 480х320 на ili9486 с параллельным 16 битным интерфейсом. Дисплей подключен к платке stm32f411.Прога для управления дисплеем написана без использования библиотек,просто на порты стм подключенные к дисплею выводятся нужные данные.Код с настройками портов стм и функцией отправки данных на дисплей приведен ниже.В данный момент использую только первые 8 бит шины из 16,для простоты эксперементов.
Код: Выделить всё
//Настройка портов
#define RCC 0x40023800
#define RCC_AHB1ENR ((volatile uint32_t *)(RCC+0x30))
#define GPIOA 0x40020000
#define GPIOA_MODER ((volatile uint32_t *)(GPIO+0x00))
#define GPIOA_ODR ((volatile uint32_t *)(GPIO+0x14))
#define GPIOB 0x40020400
#define GPIOB_MODER ((volatile uint32_t *)(GPIOB+0x00))
#define GPIOB_ODR ((volatile uint32_t *)(GPIOB+0x14))
*RCC_AHB1ENR=3; //Подключаем А ,В
*GPIOA_MODER=349525; //Пины общего назначения выходы
*GPIOA_MODER=349525; //Пины общего назначения выходы
*GPIOA_ODR=0;
*GPIOB_ODR=0;
delay(50);
*GPIOB_ODR=1;
//////////
Код: Выделить всё
//Функция отправки посылок
void LCD_Write(char DATA1,char TIP1 ){
*GPIOA_ODR=DATA1;
if(TIP1==1)*GPIOB_ODR=1;else *GPIOB_ODR=9; //Если 1 то команда,если 0 то данные (Устанавливаем лог уровень на пин дисплея данные/команда )
delayMicroseconds(400);
if(TIP1==1)*GPIOB_ODR=5;else *GPIOB_ODR=13;//Если 1 то команда,если 0 то данные (Устанавливаем лог1 на пин записи с учетом выбора данные/команда)
delayMicroseconds(400);
*GPIOB_ODR=1; //Устанавливаем лог 0 на пин записи
delayMicroseconds(400);
}
Основной код,это просто многократный вызов функции LCD_Write с необходимыми аргументами.
В общем в данный момент дисплей проходит инициализацию,далее командами Column Address Set и Page Address Set выделяю область куда выводить данные,затем командой Memory Write зажигаю пиксели выделенной области.
В итоге дисплей отрисовывает пиксели. Проблема заключается в том,между командами в функции обязательно должна быть пауза не менее 400микросек,иначе дисплей не реагирует на команды,то есть если в вот в функции LCD_Write паузы установлены на 400 -все нормально работает,рисуються пиксели но медленно,если же просто заменить значение 400 на например 200 ничего не работает вообще.В чем проблемма?


