Comments 14
Странно, мне казалось, что трансрефлективный дисплей по определению должен быть LCD, никак не OLED.
Да-да, помню, на изиэлектрониксе его «раскуривали», но так и не «раскурили». И SSD1238 действительно контроллер для TFT
И в 2020 году мы по прежнему будем видеть тексты вроде
GPIOA->MODER |= (GPIO_MODER_MODE5_1 | GPIO_MODER_MODE6_1 | GPIO_MODER_MODE7_1);мда.
void stm32f407_spi::stm32f407_spi_send(uint8_t data)
{
SPI1->DR = data;
while((SPI1->SR & SPI_SR_BSY)) continue;
}
Этого достаточно чтобы SPI заработал в нужном нам режиме и передавал данные на максимально возможной скорости.
К сожалению здесь максимально возможная скорость не будет достигнута
Вы про бит TX is empty? С ним, к сожалению, с данным экраном работать не получается, хотя осциллограммы корректные.
Тут (на хабре) некоторое время назад была статья про то, как достигать максимальной скорости из SPI (даже без DMA). Сколько помню, все свелось к тому, что нужно проверять флаг того, что данные передались из DR во внутренний сдвиговый и сам DR сейчас «пуст» (в него можно писать). И, по сути, за счет этого достигается эффект непрерывной передачи. Типа данные еще передаются, а мы уже заготовили в DR следующую пачку. Ну а вообще лучше DMA конечно. Но это чуть усложнит пример (ИМХО).
А, и самое главное. Проверять перед отправкой, а не после. Чтобы по-максимуму использовать SPI время.
Зачем это шаманство с кучей массивов и указателями на массивы, когда можно делать так, как делают другие уже сто лет? Цифра ноль это код 48 в формате asc2. Далее делаем двумерный массив, где нулевой элемент это цифра ноль, первый элемент цифра один, второй элементы цифра два и так далее. При парсинге строки *char мы просто вычитаем из символа значение 48 и подставляем в массив.
Sign up to leave a comment.
Запускаем трансфлективный TFT дисплей на SSD1283A с помощью STM32