STM32 Nokia 1110 LCD графическая библиотека
|
|
Sergi | Дата: Суббота, 31.12.2016, 20:58 | Сообщение # 1 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| Написал графическую библиотеку для STM32F030 и дисплея Нокия. Работатет с 1110,1112,1202 и прочими с 9битным интерфейсом. Немного кривовата, но я же не программист. Вот видео работы https://www.youtube.com/watch?v=4BIfsrSmDO8 Для отображения необходимо вызвать подпрограмму send_lbuf() вручную или вставить в прерывание. Я вставил в SysTick для обновления 10 раз в секунду.
Сообщение отредактировал Sergi - Воскресенье, 01.01.2017, 07:12 |
|
| |
Sergi | Дата: Суббота, 31.12.2016, 21:04 | Сообщение # 2 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| Вот пример из видео C моей тактовой 48 МГц буфер выталкивается за 0.7 мСек Да! И всех с Новым Годом!!!!!!!!!!!!!!!
Сообщение отредактировал Sergi - Воскресенье, 01.01.2017, 07:07 |
|
| |
pet_pupkin | Дата: Среда, 15.11.2017, 19:04 | Сообщение # 3 |
Рядовой
Группа: Проверенные
Сообщений: 4
Статус: Offline
| Здравствуйте , хотелось подключить вашу библиотеку для STM32F072 discovery,но вот не нашел в коде подключение выводов дисплея , clk к порту а _5 ,sda a_7 ,а выводы cs ? и rst ? Я только учусь Си, до этого только асм на пиках
|
|
| |
Sergi | Дата: Четверг, 16.11.2017, 09:11 | Сообщение # 4 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| rst lcd я подключаю к rst mcu. Так-же можно подключить к +питания дисплея через подтягивающий резистор (обычно 10к). Если на выбраном SPI подключен только дисплей - вывод CS нужно подключить на землю, иначе подключать на отдельный вывод мк для управления несколькими ведомыми.Активный уровень - низкий.
|
|
| |
pet_pupkin | Дата: Пятница, 17.11.2017, 16:57 | Сообщение # 5 |
Рядовой
Группа: Проверенные
Сообщений: 4
Статус: Offline
| Спасибо ,пробую.
|
|
| |
pet_pupkin | Дата: Суббота, 25.11.2017, 22:37 | Сообщение # 6 |
Рядовой
Группа: Проверенные
Сообщений: 4
Статус: Offline
| Не хочет код работать у меня,делал в Keil 5 и CubeMX,компилится без ошибок но порт spi не шевелится, смотрел осциллографом на выводах дисплея низкие уровни.Может я что то упустил по незнанию.Тактирование AHB настроить наверное как то правильно надо. Если у вас будет время и желание ,посмотрите пожалуйста где у меня не так. Проект из Keil v5, доска STM32F072 DISCOVERY , я в вашем коде только сигнал MOSI перекинул под свой проц , на шину PB_5.
|
|
| |
Sergi | Дата: Воскресенье, 26.11.2017, 20:13 | Сообщение # 7 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| Попробуйте изменить строку GPIOB->AFR[0] &=~ 0xF0000000; //SPI_MOSI alt func на GPIOB->AFR[0] &=~ 0x00F00000; //SPI_MOSI alt func и раскомментировать эту //SPI1->CR1 |= SPI_CR1_BR_0 ; //Pre Div SPI for slow LCD дисплей может не успевать
|
|
| |
pet_pupkin | Дата: Понедельник, 27.11.2017, 01:17 | Сообщение # 8 |
Рядовой
Группа: Проверенные
Сообщений: 4
Статус: Offline
| Запустил ,не прошло и месяца ,ваша библиотека оказалась рабочая, в отличии всего что валяется в инете по поводу работы дисплеев по 9 битному spi .Исходников 15 пытался переделать,не работают хоть тресни. Немножко подправил и все пошло.
|
|
| |
Sergi | Дата: Четверг, 16.08.2018, 21:07 | Сообщение # 9 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| Понадобилось разгрузить процессор. Новая версия библиотеки с применением DMA для передачи данных в дисплей.
Сообщение отредактировал Sergi - Четверг, 16.08.2018, 21:08 |
|
| |
uwrtey | Дата: Пятница, 17.08.2018, 07:18 | Сообщение # 10 |
Генерал-майор
Группа: Администраторы
Сообщений: 3300
Статус: Offline
|
не успеваю за своими мыслями......
|
|
| |
Sergi | Дата: Пятница, 17.08.2018, 09:01 | Сообщение # 11 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| Немного пришлось исправить для того чтобы можно было заполнять буфер из любого места программы без задержек. В main добавляем функцию вывода (запуск по прерыванию от таймера или вручную) типа такой: void ProcLcd(void) { if (TransferComlite) lbuf_clear(),TransferComlite = 0; //очищаем буфер для новых данных if (GetTimer(LcdTimer) >= LcdRepeat) //если выводим через таймер (у меня через 0,1сек) { ResetTimer(LcdTimer);
//Здесь что-то выводим например через PrtStrToBuf(хххх)
send_lbuf(); }; #ifdef DMA_EN if (DMA1->ISR & DMA_ISR_TCIF3) DMA1->IFCR = 0xf00,TransferComlite = 1; //проверяем окончание передачи #endif };
Заполнять буфер можно из любого места вне функции ProcLcd(). В main ProcLcd() желательно поместить внутри while(1) повыше
Сообщение отредактировал Sergi - Пятница, 17.08.2018, 09:05 |
|
| |