Здравствуйте! Подключил к плате 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);
В описании видно что в функцию передается 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" Подскажите как лучше сделать, в указателях запутался окончательно, читал книжку Страуструпа, запутался еще больше или для кейла си какой то особенный:(
Подскажите как лучше сделать, в указателях запутался окончательно, читал книжку Страуструпа, запутался еще больше или для кейла си какой то особенный:(
Си он и в Африке Си. Кейл ни при чем. Отложите Страуструпа, возьмите в руки K&R. Раздел "указатели". Пока не наступит понимание, старайтесь обходится без них.
Да ступил, просто не мог понять почему 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 кб Кеил не дает загрузить всю картинку в мк)) А Кернигана и Ритчи надо проштудировать.
Подключил к плате stm32f4discovery экран 320*240, нашел в интернете библиотеку для этого дела, работает хорошо, выводит всякие кружочки, прямоугольники, надписи.
Если не затруднит, что за библиотеку подключал? Как подключил? Сколько ресурсов потребляет (STM32f030 потянет?)?
_________________ В обычной комнатной электророзетке две фазы. Одна из них не дергается током, потому что она положительная, а вторая дергается, потому что она отрицательная
Сами посчитайте... FSMC вам не светит... памяти для загрузки картинки из флэш вам не хватит... надо прикручивать FatFs... Можно заюзать два таймера и DMA... худо бедно - 8MSPS получите на трансфере из ОЗУ... примерно 70 мС при чтении картинки с SD...
_________________ "Я не даю готовых решений, я заставляю думать!"(С)
Да ступил, просто не мог понять почему 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 кб Кеил не дает загрузить всю картинку в мк)) А Кернигана и Ритчи надо проштудировать.
Наверное, надо начать с выделенного, а потом переходить к лихорадочному листанию чужих листингов. Ведь вы пока еще не совсем все понимаете, что там написано. Вы читаете их фрагментами, как говорят "выискивая знакомые буковки". А их пока маловато. Надо бы всю азбуку выучить. Извините за приставучесть и занудство.
Сами посчитайте... FSMC вам не светит... памяти для загрузки картинки из флэш вам не хватит... надо прикручивать FatFs... Можно заюзать два таймера и DMA... худо бедно - 8MSPS получите на трансфере из ОЗУ... примерно 70 мС при чтении картинки с SD...
Не, мне картинку и SD не надо пока. Мне надо текст и графику (хорошо бы элементы GUI, чтоб не изобретать велосипед).
_________________ В обычной комнатной электророзетке две фазы. Одна из них не дергается током, потому что она положительная, а вторая дергается, потому что она отрицательная
Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 30
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения