Дисплей на SSD1289 + FSMC+STM32F103

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Дисплей на SSD1289 + FSMC+STM32F103

Сообщение КАШАК »

Доброго времени суток :)
Запустил TFT дисплей на SSD1289 с МК STM32F103VCT6. С использованием FSMC, как полагается. Дисплей завелся почти сразу, но нормально работает только заливка, при выводе какой-либо информации получается бред. Использовал найденную на просторах интернета библиотеку. В результате, с кодом из примера:
Спойлер

Код: Выделить всё

	LCD_Init();
	LCD_Clear(LCD_COLOR_BLUE2);
	LCD_SetTextColor(LCD_COLOR_GREEN);
	LCD_SetBackColor(LCD_COLOR_BLUE2);
	LCD_DisplayStringLine(50,"    Hello World!!!     ");
	LCD_SetFont(&Font8x8);
	LCD_SetTextColor(LCD_COLOR_BLACK);
	LCD_DisplayStringLine(135,"               Soft: v1.0.0   ");
	LCD_SetFont(&Font8x12);
	LCD_SetTextColor(LCD_COLOR_BLACK);
	LCD_DisplayStringLine(110,"           Demo_Keil_LCD_SSD1289");
	LCD_SetFont(&Font12x12);
	LCD_SetTextColor(LCD_COLOR_GREY);
	LCD_DisplayStringLine(90,"           Linx_83        ");
	LCD_SetTextColor(LCD_COLOR_BLUE);
	LCD_DrawLine(230,60,50,LCD_DIR_HORIZONTAL);
	LCD_SetTextColor(LCD_COLOR_RED);
	LCD_DrawCircle(200,280,20);
	LCD_SetTextColor(LCD_COLOR_MAGENTA);
	LCD_DrawRect(160,80,50,50);
	LCD_SetTextColor(LCD_COLOR_BLUE);
	LCD_DrawFullRect(150,210,120,40);
	LCD_SetTextColor(LCD_COLOR_YELLOW);
	LCD_DrawFullCircle(150,250,20);
	LCD_DrawFullRect(190,210,120,40);
на экране должно быть вот это:
Изображение
А у меня вот такой ужас:
Изображение
Попробовал вывести текст:

Код: Выделить всё

   LCD_DisplayStringLine(30,"Hello World!!!"); // 30-расстояние от верхнего края   
   LCD_DisplayStringLine(60,"Hello World!!!");
   LCD_DisplayStringLine(90,"Hello World!!!");
   LCD_DisplayStringLine(120,"Hello World!!!");
Получил нечто жуткое:
Изображение

В чем может быть проблема?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение dosikus »

Переписывал пины FSMC ?
У меня одна версия - что то с пинами , или напутаны и инициализация.
Реклама
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение КАШАК »

Нет, пины FSMC не трогал, изменил только пин RESET. А если неправильно идет передача данных, заливка будет нормально работать? Специально гонял заливку разными цветами, все в норме. Инициализацию взял готовую. Пробовал менять настройки ориентации, никакого эффекта, все равно вывод идет в какую-то обрезанную область.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение dosikus »

Я всего то перепутал два рядом стоящих пина . :)))
Это было нечто ...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение КАШАК »

Даже так? :) Сегодня вечером проверю еще разок :)
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Реклама
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение КАШАК »

Перепроверил подключение, все правильно. С контактом тоже все нормально. Что еще может быть? Да, заметил, что после каждого сброса МК картинка на дисплее немного меняется, но правильно никогда не становится. А с настройкой FSMC и пинов у меня все правильно? Просто с FSMC работаю первый раз в жизни:
Спойлер

Код: Выделить всё

void Init_GPIO(){
	  RCC->APB2ENR |= RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPDEN | RCC_APB2ENR_IOPEEN;

	  GPIO_InitTypeDef GPIO_InitStructure;

	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
	  GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15;
	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

	  GPIO_Init(GPIOD, &GPIO_InitStructure);

	  GPIO_InitStructure.GPIO_Pin = 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_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

	  GPIO_Init(GPIOE, &GPIO_InitStructure);

	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

	  GPIO_Init(GPIOB, &GPIO_InitStructure);

	  SysTick_Config(72000000/1000);//1ms
}

void Init_FSMC(){

    RCC->AHBENR |= RCC_AHBENR_FSMCEN;

    FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
    FSMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructure;
    FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 0;  //0
    FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 0;   //0
    FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 2;     //3
    FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0;
    FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 1;//1
    FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0;
    FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A;

    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
    FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
    FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
    FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
    FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
    FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Enable;//disable
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;

    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
    FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 0;    //0
    FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 0;	//0
    FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 4;	//3
    FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0;
    FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 1;//1
    FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0;
    FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A;
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;
    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);

    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}
Просто смущает, что в библиотеках есть вот такая функция для каждого вывода FSMC:

Код: Выделить всё

GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
А у меня компилятор ее не знает, в стандартной библиотеке stm32f10x_gpio.h ее нет.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Реклама
srg320
Встал на лапы
Сообщения: 85
Зарегистрирован: Пт фев 01, 2013 17:47:26
Откуда: Украина, Луганская область

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение srg320 »

Могу ошибаться, но по-моему, если берётся вывод FSMC A16, то адрес LCD_RAM должен быть 0x60010000 даже для 16битной шины.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение dosikus »

КАШАК писал(а): Просто смущает, что в библиотеках есть вот такая функция для каждого вывода FSMC:

Код: Выделить всё

GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
А у меня компилятор ее не знает, в стандартной библиотеке stm32f10x_gpio.h ее нет.
С портянкой вашей разбираться лениво .
Смущаться не надо , либа под STM32F2xx.

Плата самодельная ? На длинных проводах ?
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение КАШАК »

Плата самодельная
ИзображениеИзображение
Провода 40см., китайский, разноцветный шлейф, с коннекторами на концах. С платой STM32 VL Discovery дисплей работал нормально, правда там нет FSMC и скорость обмена в разы ниже.
Последний раз редактировалось КАШАК Пн июл 15, 2013 11:06:23, всего редактировалось 1 раз.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение КАШАК »

srg320 писал(а):Могу ошибаться, но по-моему, если берётся вывод FSMC A16, то адрес LCD_RAM должен быть 0x60010000 даже для 16битной шины.
Хм. Попробую.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
srg320
Встал на лапы
Сообщения: 85
Зарегистрирован: Пт фев 01, 2013 17:47:26
Откуда: Украина, Луганская область

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение srg320 »

КАШАК писал(а):Провода 40см
40 - это много, у меня было 10-15 та были проблемы
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение КАШАК »

Я так и думал, что провода слишком длинные, просто паять пока не хотелось :? ну ладно, вечером запаяю короткие провода. напишу о результатах...
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение КАШАК »

Значит укоротил я провода до 10 см. (были 20 см., обманул немного) теперь на экране вижу такое (цвета поменял):
Изображение

В общем мало что изменилось. На помехи реагирует очень сильно, даже если руку к проводам поднести, начинает полную чушь выводить. Укорочу провода до минимума, все равно плата и дисплей рядом стоять будут, и проверю еще раз. Хотя вот тут вообще кошмар с проводами, а работает:
Изображение

P.S.
С адресом LCD_RAM 0x60010000 вообще не работает, только с 0x60020000
Опыт растет прямо пропорционально выведенному из строя оборудованию...
srg320
Встал на лапы
Сообщения: 85
Зарегистрирован: Пт фев 01, 2013 17:47:26
Откуда: Украина, Луганская область

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение srg320 »

Вставьте задержки в местах, где происходит запись данных в дисплей, если на малой скорости рисует всё правильно, то 100% причина - провода
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение Satyr »

КАШАК писал(а):Значит укоротил я провода до 10 см. (были 20 см., обманул немного) теперь на экране вижу такое (цвета поменял):
Изображение
Раз такая картинка, то с проводами и FMSC все ОК.
Инитишь не в той ориентации, что рисуешь, скорее всего.
И выводишь неправильно. С окном вывода промахиваешься.
Под кучу дисплеев библиотеки есть в самой библиотеке под STM32.

Туча драйверов легко портируемых есть в микрочиповской графической библиотеке.
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение КАШАК »

Добавил задержки, но это вообще ничего не дало. Все разбросано по дисплею, как будто неправильно определяются то ли границы, то ли области памяти. Единственное, что работает правильно - это заливка. Что еще можно сделать?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
srg320
Встал на лапы
Сообщения: 85
Зарегистрирован: Пт фев 01, 2013 17:47:26
Откуда: Украина, Луганская область

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение srg320 »

Satyr прав, скорее всего дело в ориентации. Нужно поиграться с регистром R11 (биты ID1, ID0, AM)
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение Satyr »

тут еще надо понимать, что ориентацию меняешь, а регистры окна и курсора как были так и остаются. они не крутятся.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение Satyr »

ориентация она вобщем то только на инкриментатор адреса при выводе битмапа по 22 регистру влияет.
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: Дисплей на SSD1289 + FSMC+STM32F103

Сообщение КАШАК »

Да, точно, при работе без FSMC пришлось кучу всего в функциях вывода переписывать и весь шрифт для адекватной работы экрана... В итоге заработал вполне себе нормально:
ИзображениеИзображение

Видимо и здесь так придется :(
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Ответить

Вернуться в «Периферия»