Хорошая статья !
Я у себя обратил внимания (сейчас, на Н7), что "чип селект" сигнал отключает ведомого раньше чем все данные приняты микроконтроллером )
Что бы разобраться с "чем то", нужно понимать - для чего "это всё делается". А я пока не могу понять, для чего там такое количество флагов и регистров...
Чего делать, надо дальше думать )
// Приём while (!(SPI1->SR & SPI_SR_RXP)); // Ждать завершения приёма rf_data = *(volatile uint8_t *) &(SPI1->RXDR); rf_data = *(volatile uint8_t *) &(SPI1->RXDR);
На Н7 RXP - это флаг состояния буфера RX. Надо да, проверять именно факт отправки данных. И совершенно не могу понять как выстроить взаимосвязь между размерами буфера, форматом отправленных (принятых) данных (размером отправляемых пакетов)...
У меня два раза считываю данные по 8 бит. Если считать один раз 16 бит, в данных будет полная ерунда... Хотя вроде как должно быть выравнивание данных. Или буфер как то сдвинуть надо...
@aleksej-6 Я тут написал тактирование для H7xx. Пока для кварца на 25. У меня такой стоит.
Весь материал здесь https://disk.yandex.ru/d/ymB60PAjT5rjTw
Пример в каталоге MTWorkDevel\Developer\Tests MK\H7xx\
После праздников буду разбираться с SPI
Доброго времени !
По поводу SPI на H7 серии, там интересная особенность есть с выводом sck. У себя для нормального тактирования выставил в настройках пина PULUP. Иначе от любой наводки (даже если руку поднести) идёт сбой (может cube неверно выставляет настройки, пока не разбирался).
Дисплей с контроллером ST7789 работает нормально. Сейчас получил дисплей с ST7789V, запустить не могу. Эдуард, заведомо рабочего файла инициализации у вас нету случайно ?)
@aleksej-6 Доброго! На github'е можно поискать, сто процентов будут варианты, вот например, я по-быстрому пролистал - ссылка.
На такой нет.
Попробовал и так и этак вновь полученный экранчик запустить. Решил, что его проще "выкинуть", слишком много не известных. Или режим цветности не тот (18 бит) или он вообще только по параллельному интерфейсу может работать, или просто попался бракованный. В той документации что идёт на него вроде как всё понятно, но это же китай (хотя конечно же это я чего то не так делаю, но разбираться время терять не хочу). Чего они там могли нового на придумать, да и в документе на экран есть противоречия в информации.
Заказал новые, сразу три разных, с отзывами о работе ) Какой ни будь то заработает )
Да, покупал экранчик на алиэкспрессе, продавцу написал - тишина в ответ. Да и ладно.
Прочитал на одном из форуме, идея про то что переключать spi с 8 бит в режиме передачи команд на 32 бит (например) в режиме передачи данных. Вопрос, верная ли эта идея ?
А так, если эта идея сработает, то через dma можно за раз весь экранный буфер можно выводить ) А то приходится по частям выводить буфер с изображением.
(маленький экранчик не хочу пока "переводить" на параллельный интерфейс, он и выводы "пожрёт" на МК, и разводку городить на плате, да и сам пока не начал делать на параллельном интерфейсе, пока не знаю чего там и как)
@aleksej-6 Перезакачайте библиотеку на STM. Я там ошибку в тактировании нашёл.
@aleksej-6 Начал пробовать SPI. Не могу тактирование найти как включается. Как к шине тактирования подключаться знаю, а как источник выбрать, не нашёл.
Эдуард, я только кубом всё настраиваю..
https://github.com/rogerkupari/STM32H7/blob/master/SPI/main.c - вот такая ссылка есть, может она поможет.
И заметил такую особенность, все выводы spi я у себя pul-up подключаю, иначе руку не поднести. Сбивается и периодическая ерунда получается с данными, соответственно.
SPI1->CR2 = 0; // количество данных // Enable SPI SPI1->CR1 |= SPI_CR1_SPE; SPI1->CR1 |= SPI_CR1_CSTART;
@aleksej-6 Спасибо. Завтра глянем.
Глянул сегодня. У него инициализация тактирования по умолчанию, а меня интересует вот эта часть.
На такой вопрос у меня нет ответа (
Через настройку куба, spi Н7. У меня задействованы spi1 и spi2, попробовал перенастроить 2spi, после изменения у него настроек (cpha 1), 1spi заработал по другому. Экран на нём висел - перестал работать. Перепроверил пару раз - экран стабильно переставал работать...
И при считывание буфера (при приёме) первый результат у меня всегда ложный, вторые и последующие данные всегда верные. Думал это из-за фазы или полярности sck.
Наверное вручную лучше настраивать...
(толку от меня немного, но некоторое время буду отсутствовать))