Попался мне в руки SafeTouch , вещь для меня бесполезная , но товарищ который притащил его , уверял что подрубил другой такой же к китайскому "Тестеру компонентов".
Только всё отображается зеркально.
Разобрав дисплей наткнулся на на 32 битный микроконтроллер atmel , мк для меня оказался бесполезным . т.к. построен он был не на cortex , а изучить 1 мк , который никогда больше не используешь , мне показалось глупостью. И тут я совершил фатальную ошибку , решил снять микроконтроллер используя паяльный фен. Дисплей был перегрет , и в некоторых местах появились пятна.
Сняв мк , и поняв что я тот ещё рукожоп . Принялся искать документацию на китайский "Тестер компонентов" , найдя нужную документацию и узнав что в дисплее стоит контроллер ST7565.
Я решил проверить не сдох ли дисплей . подрубил к ардуино нашёл библиотеку . Загрузил код , и на дисплее появилось .
Отлично, дисплей жив.
Т.к. дуни уже давно стали у меня только средством проверки разных модулей, то нужно перетащить дисплей на мк , которые я использую повсеместно , а именно STM32F103C8 .
Немного порывшись в интернете , конкретно под мой случай , я ни черта не нашёл. Вернее , даже под другие микроконтроллеры мало кто подрубает дисплеи ST7565 , возможно это связанно с ценой , т.к. на али они стоят зачастую дороже своих цветных собратьев.
Но всё же несколько примеров было . А т.к. "My English is very bad" , то как исходником я воспользовался статьей https://cxem.net/mc/mc162.php "Подключение LCD-дисплея ST7565 к микроконтроллеру MSP430"
Я в глаза не видел микроконтроллеры MSP, но исходный код всё же глянул. Т.к. раньше я программировал avr , то было не трудно понять исходный код
#define LCDPORT P1OUT #define GND BIT0 #define VCC BIT1 #define A0 BIT2 #define CS BIT3 #define SCK BIT4 #define SDA BIT5 #define RST BIT6 void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR = 0xFF; LCDPORT &= ~GND; LCDPORT |= VCC; LCDPORT &= ~RST; __delay_cycles(1000); LCDPORT |= RST; LCDPORT &=~A0; LCDPORT &=~CS; doSPI(CMD_SET_BIAS_7); doSPI(CMD_SET_ADC_NORMAL); doSPI(CMD_SET_COM_NORMAL); doSPI(CMD_SET_DISP_START_LINE); doSPI(CMD_SET_POWER_CONTROL | 0x4 ); __delay_cycles(1000); doSPI(CMD_SET_POWER_CONTROL | 0x7); __delay_cycles(1000);
немного изменив его я получил
lcd_reset(); lcd_dc(0); HAL_Delay(1); doSPI(CMD_SET_BIAS_9); doSPI(CMD_SET_ADC_REVERSE); doSPI(CMD_SET_COM_NORMAL); doSPI(CMD_SET_DISP_START_LINE); doSPI(CMD_SET_POWER_CONTROL | 0x4 ); HAL_Delay(1); doSPI(CMD_SET_POWER_CONTROL | 0x7); HAL_Delay(1); doSPI(CMD_DISPLAY_ON); doSPI(CMD_SET_ALLPTS_NORMAL);
Как видите в принципе я ничего не изменил , только __delay_cycles(1000); на HAL_Delay(1); , и LCDPORT &= ~RST; LCDPORT |= RST; на lcd_reset(); , и LCDPORT &=~A0; на lcd_dc(0); . А LCDPORT &=~CS; поставил на аппаратное передёргивание .
В целом , перекопировал всё из исходника в свой проект , немного изменил.
Теперь время настроить сам проект. Открываем куб и настраиваем там нужный spi и выводы reset , dc , cs. У STM32F103C8 2SPI , я выбрал 1, но заменить его на 2 не составит труда.
Частоту установил на 72МГц , но изначально проверял на 8.
Я использую TrueStudio , спасибо компании ST , за то что выкупила её и модифицирует под свои камни.
Вот изменённая функция передачи данных , благодаря библиотеке HAl , можно спокойно перенести на 2 SPI если предварительно настроить в кубе SPI2 , то в коде нужно будет заменить HAL_SPI_Transmit(&hspi1,(uint8_t*)aTxBuffer, 1, 5000); на HAL_SPI_Transmit(&hspi2,(uint8_t*)aTxBuffer, 1, 5000);
-
void doSPI(uint8_t d) { aTxBuffer[0]=d; HAL_SPI_Transmit(&hspi1,(uint8_t*)aTxBuffer, 1, 5000); HAL_Delay(1); }
Собственно всё , загружаю код и вижу :
Зеркальность, ну хотя бы загрузился и прошёл инициализацию. Спасибо А.Касьянову , он в своём проекте всё предусмотрел.
замена строчки
doSPI(CMD_SET_ADC_NORMAL);
на
doSPI(CMD_SET_ADC_REVERSE);
Убрало зеркальное отображение.
Собственно и всё . На фото видно как я повредил дисплей перегревом. Неравномерная яркость пикселей . и пару белых пятен.
Исходный проект в CubeMX и TrueStudio прилагаю.
Прикрепленные файлы:
- stm32f103_st7565.rar (1066 Кб)
Комментарии (6) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]