Да, в CubeMX посмотрел PA15 на SYS_JTDI. И заменил я PA15 на PA12 скетч загрузился, но ничего не загорелось. Попробовал и со строчкой enableDebugPorts(); и без нее. Никак не работает вообще через ст-линк. Пробовал со строчкой enableDebugPorts(); и без нее на пин PA10. Результат такой же - ничего не работает.
Спасибо за инфо. Попробую у себя
Вернул пины PB3 PB4 PB5 но при этом сменил PA15 на PA10. И вот тут результат:
При добавлении строчки enableDebugPorts(); работает корректно
При удалении строчки enableDebugPorts(); бегут только верхние 2 пикселя от букв и нижние 2 пикселя от букв, а середина не горит. Но при этом видно что бегучка работает.
No comments… как говорится
Тестирую двойной буфер и обнаружил такую ситуацию. Двойной буфер работает если подключены 1 или 2 матрицы.
Но когда в стандартном скетче rgb_bitmap указываешь, что по ширине 3 матрицы, то ничего не работает и просто рандомные светодиоды горят, если на матрице что-то было до этого. Если ничего не было на матрице, то ничего и не горит после заливки скетча. Выставляешь 1 или 2 матрицы - то скетч начинает работать.
Я думаю, что STM просто памяти не хватает и когда включаешь 3 матрицы у него нервно мигает светодиод, который на PC13 идет. Я когда тестировал UART и указывал маленький буфер у меня программа зависала и также мигал этот же светодиод.
У меня еще просьба помочь с функцией stringBounds
void DMD::stringBounds(const char* bChars, uint16_t length,
int16_t* w, int16_t* min_y, int16_t* max_y, byte orientation)
*bChars - это указатель на массив с буквами, которые нужно выводить
length - это длина отображаемого массива
*w - это указатель на ширину строки (в которой как я понял и будет выводится текст)
*min_y - указатель на нижнюю точку строки
*max_y - указатель на верхнюю точку строки.
Так вот вопрос, когда я в основной программе вызываю функцию dmd.stringBounds(n,100,50,2,10);
компилятор выдает ошибку Compilation error: invalid conversion from 'int' to 'int16* {aka short int*}' [-fpermissive]
я понимаю, что возникает проблема приведения типов данных, но я не понимаю, как решить эту проблему.
Подскажите, что я должен ввести в функцию dmd.stringBounds(), чтобы она работала корректно?
Вполне может быть.
Какой размер матриц - 64х32 ?
Для панелей RGB 64x32 в режиме COLOR_4BITS_Packed
каждая панель требует 3 Кбайта RAM. С двойным буфером, соответственно - 6 Кб, для трех панелей - 18К. А у блюпила всего 20К…
Да, матрица 64*32
Конечно. Вы же сами цитируете описание вызова функции, где сказано, что три последних параметра - это указатели на переменные. Когда вместо указателей вы пытаетесь передать туда константы - будет ошибка.
Вместо явно указанных значений нужно передать указатели на переменные, которые содержат эти значения.
А что Вы вообще пытаетесь от этой функции получить? Эта функция вычисляет ширину и высоту области экрана (в пикселях), которую займет заданный текст, напечатанный указанным шрифтом.
А Вы вызываете ее с уже заданными шириной и высотой:
я вообще не понимаю, чего вы пытаетесь добиться?
Да я всё пытаюсь сделать бегущую строку в середине модуля.
Анимацию сделать не получилось, но суть думаю понятна.
А без двойного буфера как-то можно это сделать?
Это я понял.
Но мне непонятно, для чего вы вызываете функцию таким образом:
Что означают каждая из цифр в скобках?
Я хотел получить :
*bChar - буквы которые будут выводиться
length - длина которая определяет количество выводимых букв
*w - а вот это я как раз думал длина поля в котором будет бегущая строка (если длина модуля 64 пикселя, а я укажу 40, то я думал, что в ширине в 40 пикселей будет бегать строка)
*miny - а это просто нижняя граница бегущей строки
*maxy - верхняя граница бегущей строки.
Как-то так я думал, будет работать…
100 - это кол-во выводимых букв
50 - это длина поля, из всей длины матрицы в которой будет бегущая строка
2 - это нижняя граница поля
10 - это верхняя граница поля
все в пикселях
Во-первых, чтобы больше к этому не возвращаться - вы из синтаксиса С разве не понимаете, что если функция ожидает указатель - вызывать ее с явно заданной цифрой глупо?
А далее - смысл этой функции совсем другой. Она не форматирует экран и не выводит строку. Она лишь вычисляет ее будущие размеры. Поэтому функция и вызывается с указателями - в эти переменные будет помещен результат вычисления длины и высоты области экрана, занимаемого текстом. Функция всегда вычисляет размеры полной строки, о том что Вы пытаетесь напечатать текст в меньшую область - функция не в курсе.
Да, я тоже уже начал думать, что это какая-то производная функция, и в чистом виде ее трогать не стоит.
Но можете подтолкнуть на мысль, получится ли сделать бегущую строку в середине матрицы без двойного буфера? Как заставить строку бежать за границы отступа матрицы?
У меня даже идей нет куда копать:(
Когда бегущая строка убегает за границы матрицы я как-то понимал это (координаты становятся отрицательными и буквы убегают в нибытие)
Но как сделать отрицательные координаты в середине матрицы я не знаю.
Получится, но это потребует очень много работы. Надо либо переписывать библиотеку, либо писать свои методы вывода текста в ограниченную область и прокрутки их отдельно от основного экрана.
С двойным буфером сделать это на порядок проще. Почему вы не хотите его использовать?
Так не влезает у него в память вроде как … или я путаю участников обсуждения …
Я на перспективу думал, если я потом 3 матрицы подключу и чтобы только скетч залил и полетели. А на 3 матрицах не хватает памяти.
Но сейчас хотя бы на одной сделать. Попробую на двойном буфере реализовать
И да правильно поняли.