Здравствуйте всем,
У меня вопрос такой имеется плата stm32f407zgt6 и дисплей ili9488 без тача. Не могу подружить.
Использую софт
1. Стм32кубеМХ
2. Touchgfx
3. Stm32cubeIDE
Никто не подскажет попроще путь? Я только начинаю разбираться с этим со всем)
[uquote="veso74",url="/forum/viewtopic.php?p=4769556#p4769556"]lubitel5, меняете содержимое глобальной переменной count_print в прерывании. Добавьте volatile (если не)?[/uquote]
В данном случае она ж и меняется в прерывании.
Помогите люди добрые
Работают в Keil, отладка/прошивка через ST-LINK V2. В какой-то момент, прошивать стало всю флешь, от начала и до конца, а не только то, что использовано в программе. После чего так стало не помню, точно менял .sct чтобы распихать стек и мелкие переменные в CCRAM, а большой массив в остальную RAM. Каждый раз при прошивке перетирать всю память тоскливо, сама программа пока чуть больше 4кБ из 500. Не пойму куда копать, то ли в sct, то ли в настройках самого ST-LINK, то ли в компилятор (чтобы он в конце HEX-файла нули не писал)...
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Массив 120к, я заметил что вроде после его добавления такое стало, сейчас попробовал убрать +ZI из scatter файла, но это не повлияло, да и пишет во флешку явно больше 120к, там прямо до конца идет. И в Target поставил галки Noinit, не влияет.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Легло вроде все верно, но смущает что регионы RW_IRAM в скаттере как бы включены в LR_IROM1 судя по скобкам, и в map файле такая строчка получилась: " Load Region LR_IROM1 (Base: 0x08000000, Size: 0x0001f05c, Max: 0x00080000, ABSOLUTE)", т.е. там и код и все переменные и массив 120к. И в конце в итоге:
Total RO Size (Code + RO Data) 4720 ( 4.61kB)
Total RW Size (RW Data + ZI Data) 122348 ( 119.48kB)
Total ROM Size (Code + RO Data + RW Data) 127068 ( 124.09kB)
т.е. получается весь образ 127к, углядел адрес в момент конца загрузки, похоже на правду +-
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
[uquote="Engineer_Keen",url="/forum/viewtopic.php?p=4769649#p4769649"]... Каждый раз при прошивке перетирать всю память тосклив ...[/uquote]
Keil, STM32G. Tо же самое произошло, когда ввел одну константу в эмулированной флэш как EEPROM (в данном случае: double).
Program Size: Code=6090 RO-data=522 RW-data=416 ZI-data=1648
Из-за медленной записи МК по всей памяти (и невозможности найти быстрого решения) зaменил метод: (проверка пуста ли ячейка, если да, то запись по умолчанию, если нет: прочитать содержимое). Но сама причина интересная.
Последний раз редактировалось veso74 Ср дек 03, 2025 15:28:05, всего редактировалось 1 раз.
#define EEPROM_BASE_ADDR 0x0801F800 // start address of the last FLASH page (page 63)
Тут я бы понял, даже если программа мелкая и кончается адресом 0x08000100, то программатор наверно прошьет все от 0х80000000 до 0x0801F800, хоть там и нули с 100го адреса, но в 0x0801F800 - ячейка EEPROM, т.е. та же флешь.
Но у меня-то кода 4к а дальше только чистый RAM, я даже в скаттере его вынул из LR_IROM1, теперь в map файле строчка поменялась на: Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00001270, Max: 0x00080000, ABSOLUTE), но все равно есть вторая:
Load Region ER_IRAM (Base: 0x20000000, Size: 0x0001ddec, Max: 0x00020000, ABSOLUTE) и в итоге весь образ опять 127к, надо как-то указать что этот кусок в образ ROM не входит, но я никак не могу найти где и как это делается.
Пока ехал домой, подумал, может косяк в том что я память под переменные резервирую через space?
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Что может быть не так? АЦП-ДМА после завершения передачи зависает в прерывании, это я так понял. По переводу-"получено неожиданное прерывание", но так и не понял что это значит. В описаниях режимов у F407 и F103 для моего случая не нашел. Но 407-й работает, а 103-й виснет.
надо как-то указать что этот кусок в образ ROM не входит, но я никак не могу найти где и как это делается.
Блин, нашел, просто в директиву AREA надо было NOINIT вписать
Вопросов не возникало пока я большой массив не задействовал, раньше переменные не сильно объема добавляли и я не замечал что прошивка долго идет...
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
В прерывании я изменял переменную и использовал в обработке данных. Но проблема для меня в том, почему виснет при разрешении прерывания. И не важно пустая функция или нет.
Здравствуйте, микроконтроллер stm32H743, мучаю я его кодированием джипегов, а так же мучаю ИИ в поисковике Гугл, он помог мне как то запустить, но дальше несет ересь, слишком сложно для него... или для меня, смотря с какой стороны посмотреть.
Получается идеально вывести картинку за один проход, разрешение которой кратно 16, на сколько памяти оперативной хватает, но никак не могу понять как закольцевать чтоб считывалось частями, чтобы открывать большие изображения, а не 100x100 максимум.
Программа объемная, с кучей ошибок, по этому выписал тезисами, в программе рассчитывается разрешение на кратность 8 или 16, лишнее обрезается если есть, количество пикселей исходя от раскодированного объема данных, я это всё вырезал (я сам писал это из головы, по этому оно скорее всего не работает). DMA или прерывания пока не использую, один раз залез туда, перекрестился и забыл про эту идею, на stm32f0 или stm32f4 еще можно в это вникнуть, но не на stm32h7, пока мне сама логика расчета джипега не понятна, скорость работы второстипенна. Я так понимаю, всё волшебство заключается в стандартной функции HAL_JPEG_DataReadyCallback, которая возвращает количество обработанных байтов когда буфер заполнился, с этим числом можно работать если картинка полностью влезла к буфер. А если не влезла? Хотелось бы знать количество рассчитанных блоков по 8 на 8 пикселей или 16 на 8, но количество байт не кратно количеству блоков. Создавать мини буфер, сращивать остаток со следующей партией?
Может кто то в курсе как оно должно происходить? Спойлер
f_read(); //читаем джипег с флешки
HAL_JPEG_Decode(); //обрабатываем то что считалось с СД карты в формат YCbCr
//---> при переполнении буфера для пикселей YCbCr вызывается HAL_JPEG_DataReadyCallback,
//---> я глобально записываю сколько байт обработалось
HAL_JPEG_GetInfo(); //получаю информацию о картинке
//проверяю SUBSAMPLING - 420, 422 или 444, если отличается, запускаю HAL_DMA2D_ConfigLayer(&hdma2d, DMA2DLAYER);
// тут много кода пропустил с расчетами //
OUTPUT_LCD: //метка для возврата назад
SCB_CleanDCache_by_Addr(); // очищаем буфер с пикселями YCbCr, иначе много артефактов, очищается больше, чем сам D-кеш - 32кб, хз как, но оно работает
HAL_DMA2D_Start(); //кодируем YCbCr в RGB565
LCD_JPEG(); //выводим на дисплей кусок картинки
//конец
//проверяем прочитан ли файл с флешки полностью
f_read();
HAL_JPEG_Decode();
goto OUTPUT_LCD;
//конец