Вывод картинки на экран с ssd1289

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
ATH
Родился
Сообщения: 10
Зарегистрирован: Пн фев 04, 2013 13:42:48

Сообщение ATH »

Здравствуйте! Подключил к плате stm32f4discovery экран 320*240, нашел в интернете библиотеку для этого дела, работает хорошо, выводит всякие кружочки, прямоугольники, надписи. Захотелось вывести на экран какую-нибудь картинку. Встал вопрос как это сделать. В библиотеке есть функция:

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

/**
  * @brief  Displays a bitmap picture loaded in the internal Flash.
  * @param  BmpAddress: Bmp picture address in the internal Flash.
  * @retval None
  */
void LCD_WriteBMP(uint32_t BmpAddress)
{
  uint32_t index = 0, size = 0;
  /* Read bitmap size */
  size = *(__IO uint16_t *) (BmpAddress + 2);
  size |= (*(__IO uint16_t *) (BmpAddress + 4)) << 16;
  /* Get bitmap data address offset */
  index = *(__IO uint16_t *) (BmpAddress + 10);
  index |= (*(__IO uint16_t *) (BmpAddress + 12)) << 16;
  size = (size - index)/2;
  BmpAddress += index;
  /* Set GRAM write direction and BGR = 1 */
  /* I/D=00 (Horizontal : decrement, Vertical : decrement) */
  /* AM=1 (address is updated in vertical writing direction) */
  LCD_WriteReg(0x0011,0x6008);
 
  LCD_WriteRAM_Prepare();
 
  for(index = 0; index < size; index++)
  {
    LCD_WriteRAM(*(__IO uint16_t *)BmpAddress);
    BmpAddress += 2;
  }
 
  LCD_WriteReg(0x0011,0x6018);
}
В описании видно что в функцию передается 32-х битный адрес первого элемента массива. Я создал массив из констант

const unsigned short picture[] = {.................}

После передачи его в функцию таким образом:
LCD_WriteBMP(picture);
Кеил ругается так :main.c(21): error: #167: argument of type "const unsigned short *" is incompatible with parameter of type "uint32_t"
Подскажите как лучше сделать, в указателях запутался окончательно, читал книжку Страуструпа, запутался еще больше или для кейла си какой то особенный:(
Реклама
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

ATH писал(а):Подскажите как лучше сделать, в указателях запутался окончательно, читал книжку Страуструпа, запутался еще больше или для кейла си какой то особенный:(
Си он и в Африке Си. Кейл ни при чем. Отложите Страуструпа, возьмите в руки K&R. Раздел "указатели". Пока не наступит понимание, старайтесь обходится без них.
С уважением,
Виктор.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

ATH писал(а): В описании видно что в функцию передается 32-х битный адрес первого элемента массива. Я создал массив из констант

ut1wpr, +1000 однозначно .
В описании 32х битное без знаковое целое , а Вы передаете указатель ...
ATH
Родился
Сообщения: 10
Зарегистрирован: Пн фев 04, 2013 13:42:48

Сообщение ATH »

Да ступил, просто не мог понять почему 32-х битное, ведь по идеи должен передаваться массив из 16 битных элементов. Сейчас сделал по другому:
LCD_SetCursor(0x00, 0x013F);
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
for(index = 0; index < 20000; index++)
{
LCD->LCD_RAM = picture[index];
}
работает, правда из-за ограничения кода в 30 кб Кеил не дает загрузить всю картинку в мк)) А Кернигана и Ритчи надо проштудировать.
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Пт фев 03, 2012 17:05:22

Сообщение bat654321 »

ATH писал(а):Подключил к плате stm32f4discovery экран 320*240, нашел в интернете библиотеку для этого дела, работает хорошо, выводит всякие кружочки, прямоугольники, надписи.
Если не затруднит, что за библиотеку подключал? Как подключил? Сколько ресурсов потребляет (STM32f030 потянет?)? :)
В обычной комнатной электророзетке две фазы. Одна из них не дергается током, потому что она положительная, а вторая дергается, потому что она отрицательная
Реклама
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

bat654321 писал(а):STM32f030 потянет?
Сами посчитайте... FSMC вам не светит... памяти для загрузки картинки из флэш вам не хватит... надо прикручивать FatFs...
Можно заюзать два таймера и DMA... худо бедно - 8MSPS получите на трансфере из ОЗУ... примерно 70 мС при чтении картинки с SD...
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

ATH писал(а):Да ступил, просто не мог понять почему 32-х битное, ведь по идеи должен передаваться массив из 16 битных элементов. Сейчас сделал по другому:
LCD_SetCursor(0x00, 0x013F);
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
for(index = 0; index < 20000; index++)
{
LCD->LCD_RAM = picture[index];
}
работает, правда из-за ограничения кода в 30 кб Кеил не дает загрузить всю картинку в мк)) А Кернигана и Ритчи надо проштудировать.
Наверное, надо начать с выделенного, а потом переходить к лихорадочному листанию чужих листингов. Ведь вы пока еще не совсем все понимаете, что там написано. Вы читаете их фрагментами, как говорят "выискивая знакомые буковки". А их пока маловато. Надо бы всю азбуку выучить. Извините за приставучесть и занудство.
С уважением,
Виктор.
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Пт фев 03, 2012 17:05:22

Сообщение bat654321 »

HHIMERA писал(а):Сами посчитайте... FSMC вам не светит... памяти для загрузки картинки из флэш вам не хватит... надо прикручивать FatFs...
Можно заюзать два таймера и DMA... худо бедно - 8MSPS получите на трансфере из ОЗУ... примерно 70 мС при чтении картинки с SD...
Не, мне картинку и SD не надо пока. Мне надо текст и графику (хорошо бы элементы GUI, чтоб не изобретать велосипед).
В обычной комнатной электророзетке две фазы. Одна из них не дергается током, потому что она положительная, а вторая дергается, потому что она отрицательная
Ответить

Вернуться в «ARM»