Top.Mail.Ru
Уведомления
Очистить все

[Закреплено] STM32 для начинающих

Страница 6 / 17
Aveal
(@aveal)
Top level Admin

Ну я просто предположил ) Может там как раз наоборот, грамотно сделано.

ОтветитьЦитата
Создатель темы Размещено : 08.04.2023 16:56
(@aleksej-6)
Level 3

Доброго )

Пока для своего проекта (цифровая рация) ещё жду детали, надо будет подсоединить просто микрофон и динамик для начала. Затем освоить передачу и приём, а затем уже подключать сжатие  пакетов. Пока есть чем заняться )

Чем больше пытаюсь разобраться тем больше вопросов...

Пока смотрю информацию. Не могу понять, куда правильно подключать библиотеки. Например  -  "Первое, что нужно сделать, скопировать папку STM32F10x_Speex_Lib с библиотекой Speex в папку Drivers проекта". Почему именно в папку проекта (это из примера). Обычно же подключают в папку - "Core"?

Или же это делается из-за "уровня" приоритета работы библиотеки... Как правильно выбрать место для подключения папки с библиотеками (в сложных примерах целые папки библиотек и чего с ними делать даже примерно не понимаю). 

Или же это всё делается конкретно в каждом случае ? (или я всё не так понимаю)

ОтветитьЦитата
Размещено : 09.04.2023 11:24
Aveal
(@aveal)
Top level Admin

Доброго дня )

Библиотека в данном случае - это просто набор файлов. То есть положить их можно абсолютно куда угодно, главное сообщить компилятору и линкеру пути, по которым эти библиотеки следует искать. Вот как вариант, здесь у меня в папке Modules:

ОтветитьЦитата
Создатель темы Размещено : 09.04.2023 13:29
(@aleksej-6)
Level 3

@aveal Спасибо за ответ ! 😀 

ОтветитьЦитата
Размещено : 09.04.2023 13:54
(@aleksej-6)
Level 3

Здравствуйте !

Новый вопрос, пытаюсь переделать готовую библиотеку для работы с tft (spi) экранчиком. контроллер st7789. Библиотека работает с разрешением 240х240. Мне надо 240х320, пока есть экран 240х280. Он работает в режиме 240х260. 

Сейчас пробую освоить Н7 контроллер, оперативки много. Переменные в библиотеке поменял ,как мне кажется, буфер есть под 240х280, а вот его вывести как не понимаю ? Вывожу через DMA, а он размером 16 байт. Примеры есть готовые - выводят частями с отслеживанием по TX колбэк функции.  

Как не пытаюсь сделать отправку частями, он у меня каждую часть по экрану распихивает в в разных порядках (то слева один кусок то справа, то с низу). И каждый кусок (выведенный на экран) один и тот же (дублируется) и размером именно тем которым я его отправляю.

То есть он должен сшивать эти части, а не распихивать один и тот же...

Как сделать адресацию каждого нового куска в DMA не пойму ? 

 

 

 

   

ОтветитьЦитата
Размещено : 23.04.2023 10:12
(@eduard)
Level 4 Moderator

@aleksej-6 

Использование DMA с дисплеем абсолютно бесполезное занятие.

Его возможно использовать только в двух случаях
- заливка одним цветом
- вывод картинки.

Что бы выводить картинку нужно очень хорошо понимать, как работает дисплей.

Я с DMA особо не работал, но у серии H7 регистр адреса DMA 32 разряда. Этого достаточно, что бы выводить картинку, на данном контроллере, целиком, а не частями.

Если хочется кусками, делается просто.

У TFT дисплеев для вывода информации используется следующий метод:
- Устанавливаем координаты окна вывода;
- Считаем сколько пикселей в это окно помещается:
- Начинаем передавать столько 16 разрядных данных, сколько пикселей умещается в окне. (Вот здесь и можно использовать DMA).

Допустим у нас 320х240 пикселей экран. Разбиваем его по ВЕРТИКАЛИ на 5 частей.

Получаем 5 кусков экрана 320х48 пикселей.

Выставляем окно вывода с координатами X=0, Y=0 - левый верхний угол, X=319, Y=47 - правый нижний угол и выводим 15360 точек.

Затем выставляем координаты X=0, Y=48 - левый верхний угол, X=319, Y=95 (48+48-1 так как адресация с 0). и опять выводим следующие 15350 точек.

И так, пока не выведем всё изображение.

Если что, я очень много драйверов для разных дисплеев написал. Как это делается знаю на 80%. Остальные 20% - это дисплеи с несколькими слоями отображения. Но они мало используются и дорогие, поэтому на них мало кто клюёт.

ОтветитьЦитата
Размещено : 23.04.2023 10:39
(@aleksej-6)
Level 3

@eduard 

"но у серии H7 регистр адреса DMA 32 разряда" - чего то я это упустил (был уверен, что 16 разрядов)

Хочу этот маленький дисплей запустить по spi шине, может и без DMA. Просто готовый пример с DMA, потихоньку разбираюсь что и как...

Эдуард спасибо, буду разбираться )

ОтветитьЦитата
Размещено : 23.04.2023 10:43
(@aleksej-6)
Level 3

Это DMA2D, но она  для параллельного интерфейса (вроде как) 

ОтветитьЦитата
Размещено : 23.04.2023 10:55
(@eduard)
Level 4 Moderator

DMA может работать с любым устройством, в том числе и SPI

Вот здесь есть библиотеки, правда они на классах. Может чем то поможет https://disk.yandex.ru/d/ymB60PAjT5rjTw

MTWorkDevel->STM32Lib->Library

 

ОтветитьЦитата
Размещено : 23.04.2023 11:03
(@aleksej-6)
Level 3

Не понимаю как взять часть буфера и отправить одной частью, затем указать адрес на новый кусок ?

void SPI_send_dma(SPI_TypeDef *SPIx, uint8_t word16bit, uint8_t *pBuff, uint32_t Len, void (*func)(void))
{
//if (SPIx == hspi.Instance)
//{
//dma_spi_cnt = 2;
  Len = 62400;    // 62400
  HAL_SPI_Transmit_DMA(&hspi2, pBuff, Len);
}



//А сам буфер:


void GC9A01A_RamWrite(uint16_t *pBuff, uint32_t Len)
{
  while (Len--)
  {
    SendData(*pBuff >> 8); // отправляем старший байт (rgb 565 - 16 bit)
    SendData(*pBuff & 0xFF); // отправляем младший байт
  }
} 

Изображение уже сгенерировано и лежит в буфере, а как его от туда вытащить не знаю ?

Библиотеки скачал, спасибо. Разбираться буду конечно 

 

ОтветитьЦитата
Размещено : 23.04.2023 12:15
(@eduard)
Level 4 Moderator

В функции RamWrite забыли задать окно вывода и где функция SendData?

Я так понимаю, что она должна отсылать только один байт, а Вам нужно отослать дамп памяти через DMA

Изначально нужно настроить DMA на передачу определённого количества байт

Затем передать команду записи в RAM и передать координаты окна. Затем уже используя DMA передать буфер.

И по обрывкам кода сложно понять что Вы делаете.

ОтветитьЦитата
Размещено : 23.04.2023 12:20
(@aleksej-6)
Level 3

@eduard 

Эдуард, могу прислать весь пакет (в codeide) ?

Или куски не достающие ..   

У меня программка из интернета готовая была, она похоже не один раз переделывалась "под себя"

ОтветитьЦитата
Размещено : 23.04.2023 12:27
(@eduard)
Level 4 Moderator

У меня нет Кокоса. Его уже не поддерживают. Переходите на CubeIDE

А код глянуть можно. Но быстро не обещаю.

ОтветитьЦитата
Размещено : 23.04.2023 12:41
(@aleksej-6)
Level 3

@eduard 

я не верно написал - CubeIDE, он и есть ) 

Хорошо, попозже сброшу )

ОтветитьЦитата
Размещено : 23.04.2023 12:43
(@aleksej-6)
Level 3

Как назначить смещение адреса новой части буфера изображения не понимаю. 

Как в этой программе работает функция окончания передачи части буфера - тоже не понимаю. Колбэк функция срабатывает, пробовал делить буфер на 4 части и передавать их - на экранчике эти буферы размазывает по сторонам экрана.. 

ОтветитьЦитата
Размещено : 24.04.2023 10:10
Страница 6 / 17
Поделиться: