ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
1079394 Топик полностью
Kceния (22.02.2021 14:26, просмотров: 409) ответил evgeniy1294 на Во первых, вы должны знать, что тактирование любой периферии включается через регистры группы RCC с суффиксом ENR (Enable Register). Следующая запись эквивалентна вашей:
Компилятор помещает массивы в секцию (вероятно bss), где вся эта секция обнуляется startup-кодом еще до входа в main(). Все так делают, нулями прошивку не заполняют. В ARMе заполнение нулями происходит 32-битными порциями (обнуленный регистр в цикле копируется в память), видимо из-за этого ее размер в байтах должен делиться на 4 байта без остатка. Позже я нашла иной способ - через дефиницию __no_init, тогда линкер размещает массив в другой сегмент, который при старте 

не обнуляется:

#define DACBUFLEN2 773

#pragma location = 0x30020000 // SRAM2

__no_init uint16_t bufferDAC2[DACBUFLEN2];


Кроме того, в CubeMX есть еще и такой код:

#if defined (DATA_IN_D2_SRAM) /* in case of initialized data in D2 SRAM (AHB SRAM) , enable the D2 SRAM clock (AHB SRAM clock) */ #if defined(RCC_AHB2ENR_D2SRAM3EN) RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN | RCC_AHB2ENR_D2SRAM3EN); #elif defined(RCC_AHB2ENR_D2SRAM2EN) RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN); #else RCC->AHB2ENR |= (RCC_AHB2ENR_AHBSRAM1EN | RCC_AHB2ENR_AHBSRAM2EN); #endif /* RCC_AHB2ENR_D2SRAM3EN */

Т.е. где-то D2, а где-то AHB.