Jump to content

    

LAS9891

Участник
  • Content Count

    244
  • Joined

  • Last visited

Community Reputation

0 Обычный

About LAS9891

  • Rank
    Местный

Recent Profile Visitors

2557 profile views
  1. Спасибо. Прочитал - проблема решилась.
  2. В смысле не пишите не читаете? Я в Scatter-файле указываю область памяти SRAM1. При сборке проекта в этой области размещаются данные. Их не я сам принудительно размещаю. Вот например что расположилось в SRAM1 при сборке (.map-файл): Execution Region RW_SRAM1 (Exec base: 0x30000000, Load base: 0x08011968, Size: 0x00000910, Max: 0x00020000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object 0x30000000 0x08011968 0x0000002c Data RW 36 .data functions.o 0x3000002c 0x08011994 0x00000004 PAD 0x30000030 0x08011998 0x0000006e Data RW 442 .data calibration.o 0x3000009e 0x08011a06 0x00000002 PAD 0x300000a0 0x08011a08 0x00000008 Data RW 679 .data font12.o 0x300000a8 0x08011a10 0x00000008 Data RW 2489 .data system_stm32h7xx.o 0x300000b0 - 0x00000200 Zero RW 34 .bss functions.o 0x300002b0 - 0x00000060 Zero RW 2631 .bss c_w.l(libspace.o) 0x30000310 - 0x00000200 Zero RW 2 HEAP startup_stm32h743xx.o 0x30000510 - 0x00000400 Zero RW 1 STACK startup_stm32h743xx.o Кроме SRAM1 в Scatter-файле также указаны области DTCM, AXI SRAM, SRAM4. В них тоже располагаются какие-то данные. Если в Scatter-файле указать только эти области, то все работает без проблем, если добавить SRAM1 - Hard Fault.
  3. Убрал. Потом в код добавил: uint32_t* pointer = (uint32_t*)0x30000000; *pointer = 1; Результат в отладке: Ещё наблюдение: Пробовал зажигать светодиод в прерывании по HF. Диод не горит, подозреваю, что это происходит из-за того, что инициализации порта не была проведена.
  4. Как? В отладку не зайти. В окошке Command сыплются "Cannot access Memory". Allregia что-то знает, но молчит.
  5. ; Reset handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT SystemInit IMPORT __main LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP перед __main
  6. Похоже это мой случай. Если я использую такой scatter: ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00200000 { ; load region size_region ER_IROM1 0x08000000 0x00200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } RW_DTCM 0x20000000 0x00020000 { ; RW data .ANY (+RW +ZI) } RW_AXI_SRAM 0x24000000 0x00080000 { .ANY (+RW +ZI) } RW_SRAM4 0x38000000 0x00010000 { .ANY (+RW +ZI) } } Всё работает. Стоит мне добавить область SRAM1: ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00200000 { ; load region size_region ER_IROM1 0x08000000 0x00200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } RW_DTCM 0x20000000 0x00020000 { ; RW data .ANY (+RW +ZI) } RW_AXI_SRAM 0x24000000 0x00080000 { .ANY (+RW +ZI) } RW_SRAM1 0x30000000 0x00020000 { .ANY (+RW +ZI) } RW_SRAM4 0x38000000 0x00010000 { .ANY (+RW +ZI) } } Всё летит в Hard Fault. Тактирование SRAM1 включено в функции SystemInit (void): RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN | RCC_AHB2ENR_D2SRAM3EN); В отладчике проверил - тактирование включено. В чём проблема?
  7. СПАСИБО! Пока проверить не на чем, так что пока не важно. Мне интересно всё ли я сделал чтобы заработала SRAM1. В код добавил строчку: RCC->AHB2ENR |= RCC_AHB2ENR_SRAM1EN; // SRAM1 interface clock is enabled. В Scatter добавлю все необходимое благодаря Darth Vader. Что то ещё требуется для подключения SRAM1 в STM32H73 ?
  8. Не подскажите в чём была причина с проблемой С хипом и стеком? Столкнулся с чем то подобным, не получается корректно подключить область RAM1. Если кратко описать проблему, то я пробовал включать SRAM1 так: RCC->AHB2ENR |= RCC_AHB2ENR_SRAM1EN; // SRAM1 interface clock is enabled. В Scatter так: RW_SRAM1 0x30000000 0x00020000 { .ANY (+RW +ZI) } Собрал, перешил, запустил - проект стартует и рушится (вылетает блок GPIO, который удерживает питание для контроллера (ключ)). Мне кажется я как то не так включаю SRAM1.
  9. Я делал так же как автор вначале: В Scatter так: LR_IROM1 0x08000000 0x00200000 { ; load region size_region ER_IROM1 0x08000000 0x00200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } RW_IRAM1 0x20000000 0x00020000 { ; RW data .ANY (+RW +ZI) } RW_IRAM2 0x24000000 0x00080000 { .ANY (+RW +ZI) } } Потом в программе так: uint8_t L8_160x120[57600]__attribute__((section("RW_IRAM2")))={0x00};// uint8_t L82_160x120[57600]__attribute__((section("RW_IRAM2")))={0x00};// и это работало. Что не так делал автор поясните? Что такое Execution Region? Что такое выходная секция? и почему у меня работало а у автора нет?
  10. Учтем на будущее. Пока изображение устраивает. Важнее теперь это. Самодельный блок питания на импульсниках.
  11. Подаю снаружи. Если я заливаю дисплей одним цветом, то изображение однородно без полос. Это не оправдывает питание? При этом все равно питание может быть причиной полос на картинке?
  12. Здравствуйте! Имеется задача. С аналоговой камеры видеосигнал поступает в STM32 через встроенный АЦП. Необходимо вывести изображение на дисплей. В качестве видеобуфера используется RAM контроллера. Изображение размером 160x120, поэтому встроенной RAM достаточно. Изображение буду выводить через LTDC. Вот тут вычитал, что руководить этим должен LTDC. В смысле, если используется несколько видеобуферов, то LTDC должен формировать прерывание в конце кадра и в прерывании менять адреса видеобуфера. Запуск камеры, я так понимаю, тоже должен быть в этом прерывании. Но какими должны быть частоты работы камеры и вывода изображения на дисплей в этом случае? В смысле, кто быстрее должен работать? или нужно подобрать одинаковые частоты? Действительно ли требуется минимум 3 видеобуфера или при определенных соотношениях частот достаточно 2?
  13. Вроде заработало Только как-то странно. Почему фон разного оттенка? Вот надпись STM, слева от буквы S фон светлее чем фон ниже надписи.
  14. Нет. Дисплей не поддерживает такой формат. LTDC поддерживает. Я в буфере формирую картинку в соответствии с форматом L8. Я буду выводить черно-белую картинку на цветной дисплей. В буфере кадра храню картинку в формате L8 (каждый пиксель 8 бит). А чтобы дисплей показывал черно-белую картинку я три раза отправляю одно значение пикселя для каждого цвета (RGB).