TFT01-3.2WD + STM32F4discovery
Добавлено: Ср янв 01, 2014 19:42:59
Есть дисплейный модуль TFT01-3.2WD, который сделан для ардуино. Контроллер HX-8352. Есть дискавери F4. Пытаюсь их подружить.
На странице производителя посмотрел код. http://www.elecfreaks.com/store/32width ... p-116.html.
Меня интересует общий порядок подачи сигналов и данных на дисплей.
Судя по коду и комментариям к нему, подаётся !Reset, потом начинается инициализация.
Каждая команда или данные защёлкиваются по переходу H->L сигнала WR.
Сигналы с дискавери все есть, но дисплей никак не реагирует, только светится белым. Может, я что-то упустил?
Код в кейле под спойлером.
Спасибо.
P.S. Кстати, с Новым годом всех!
На странице производителя посмотрел код. http://www.elecfreaks.com/store/32width ... p-116.html.
Меня интересует общий порядок подачи сигналов и данных на дисплей.
Судя по коду и комментариям к нему, подаётся !Reset, потом начинается инициализация.
Каждая команда или данные защёлкиваются по переходу H->L сигнала WR.
Сигналы с дискавери все есть, но дисплей никак не реагирует, только светится белым. Может, я что-то упустил?
Код в кейле под спойлером.
Спасибо.
Спойлер
Код: Выделить всё
#include "stm32f4xx_conf.h"
/*
RS = PC4
WR = PC3
RD = PC2
CS = PC1
RESET = PC0
PD0..PD15 - data
*/
void LCD_reset(void);
void LCD_data(unsigned int data);
void LCD_comm(unsigned int comm);
void LCD_init(void);
void LCD_com_data(unsigned int com, unsigned int dat);
void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2);
void Pant(unsigned int data);
long i=0;
int main() {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | \
GPIO_Pin_5 | GPIO_Pin_6 | 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(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIOD->BSRRH = 0xFFFF; //data=0
GPIOC->BSRRL = 0xFFFF; //signals=1
LCD_reset();
LCD_init();
while (1) {
Pant(0xFFFF);
for (i=0; i<1500000; i++) {};
Pant(0x0000);
for (i=0; i<1500000; i++) {};
}
}
void LCD_reset() {
GPIOC->BSRRL = GPIO_Pin_0; //PC0=1
GPIOC->BSRRH = GPIO_Pin_0; //PC0=0
GPIOC->BSRRL = GPIO_Pin_0; //PC0=1
};
void LCD_init() {
GPIOC->BSRRH = GPIO_Pin_1; //CS=0
LCD_comm(0x0083);
LCD_data(0x0002);
LCD_comm(0x0085);
LCD_data(0x0003);
LCD_comm(0x008B);
LCD_data(0x0001);
LCD_comm(0x008C);
LCD_data(0x0093);
LCD_comm(0x0091);
LCD_data(0x0001);
LCD_comm(0x0083);
LCD_data(0x0000);
LCD_comm(0x003E);
LCD_data(0x00B0);
LCD_comm(0x003F);
LCD_data(0x0003);
LCD_comm(0x0040);
LCD_data(0x0010);
LCD_comm(0x0041);
LCD_data(0x0056);
LCD_comm(0x0042);
LCD_data(0x0013);
LCD_comm(0x0043);
LCD_data(0x0046);
LCD_comm(0x0044);
LCD_data(0x0023);
LCD_comm(0x0045);
LCD_data(0x0076);
LCD_comm(0x0046);
LCD_data(0x0000);
LCD_comm(0x0047);
LCD_data(0x005E);
LCD_comm(0x0048);
LCD_data(0x004F);
LCD_comm(0x0049);
LCD_data(0x0040);
///
LCD_comm(0x0017);
LCD_data(0x0091);
LCD_comm(0x002B);
LCD_data(0x00F9);
for (i=0; i<15000; i++) {};
LCD_comm(0x001B);
LCD_data(0x0014);
LCD_comm(0x001A);
LCD_data(0x0011);
LCD_comm(0x001C);
LCD_data(0x0006);
LCD_comm(0x001F);
LCD_data(0x0042);
for (i=0; i<15000; i++) {};
LCD_comm(0x0019);
LCD_data(0x000A);
LCD_comm(0x0019);
LCD_data(0x001A);
for (i=0; i<15000; i++) {};
LCD_comm(0x0019);
LCD_data(0x0012);
for (i=0; i<15000; i++) {};
LCD_comm(0x001E);
LCD_data(0x0027);
for (i=0; i<150000; i++) {};
///
LCD_comm(0x0024);
LCD_data(0x0060);
LCD_comm(0x003D);
LCD_data(0x0040);
LCD_comm(0x0034);
LCD_data(0x0038);
LCD_comm(0x0035);
LCD_data(0x0038);
LCD_comm(0x0024);
LCD_data(0x0038);
LCD_comm(0x0024);
LCD_data(0x003C);
LCD_comm(0x0016);
LCD_data(0x001C);
LCD_comm(0x0001);
LCD_data(0x0006);
LCD_comm(0x0055);
LCD_data(0x0000);
LCD_comm(0x0002);
LCD_data(0x0000);
LCD_comm(0x0003);
LCD_data(0x0000);
LCD_comm(0x0004);
LCD_data(0x0000);
LCD_comm(0x0005);
LCD_data(0x00EF);
LCD_comm(0x0006);
LCD_data(0x0000);
LCD_comm(0x0007);
LCD_data(0x0000);
LCD_comm(0x0008);
LCD_data(0x0001);
LCD_comm(0x0009);
LCD_data(0x008F);
LCD_comm(0x0022);
GPIOC->BSRRL = GPIO_Pin_1; //CS=1
};
void LCD_data(unsigned int data) {
GPIOC->BSRRL = GPIO_Pin_4;
GPIOD->ODR = data;
GPIOC->BSRRH = GPIO_Pin_3;
GPIOC->BSRRL = GPIO_Pin_3;
};
void LCD_comm(unsigned int comm) {
GPIOC->BSRRH = GPIO_Pin_4;
GPIOD->ODR = comm;
GPIOC->BSRRH = GPIO_Pin_3;
GPIOC->BSRRL = GPIO_Pin_3;
};
void Pant(unsigned int data)
{
int i,j;
GPIOC->BSRRH = GPIO_Pin_1;
Address_set(0,0,239,399);
for(i=0;i<400;i++)
{
for (j=0;j<240;j++)
{
LCD_data(data);
}
}
GPIOC->BSRRL = GPIO_Pin_1;
}
void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
GPIOC->BSRRH = GPIO_Pin_1; //CS=0
LCD_com_data(0x0003,x1);
LCD_com_data(0x0006,y1);
LCD_com_data(0x0007,y1);
LCD_com_data(0x0005,x2);
LCD_com_data(0x0008,y2);
LCD_com_data(0x0009,y2);
LCD_comm(0x0022);
GPIOC->BSRRL = GPIO_Pin_1; //CS=1
}
void LCD_com_data(unsigned int com, unsigned int dat)
{
LCD_comm(com);
LCD_data(dat);
};
