ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
1037186
Kceния (17.09.2020 03:26, просмотров: 23832)
ЦАП то работает, то нет. В чем причина? 

Долго искала причину, отчего в моей программе ЦАП в связке с ДМА не работает, а в примерах из STM32Cube_FW_H7_V1.8.0 работает нормально. Круг постепенно сужала, пошагово приводя оба кода к тожеству. И обнаружила совершенно парадоксальный эффект - ДМА не нравится мой буфер, откуда ему положено оправлять числа в ЦАП.


Вот так он работает, выдавая на выходе меандр:

#define DACBUFLEN     8
const uint16_t sine_wave_array[DACBUFLEN] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0FFF, 0x0FFF, 0x0FFF, 0x0FFF};

...

HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t *)sine_wave_array, DACBUFLEN, DAC_ALIGN_12B_R) ;

Но стоит убрать "const" в декларации буфера, то на выходе ЦАПа всегда ноль.


В интернете видела массу примеров, где HAL_DAC_Start_DMA(...) запускают с обычным буфером, не являющимся константой. Да и и в описании этой функции не указано каких-либо ограничений на расположение буфера в памяти.

Тогда как у меня даже фирменный пример из STM32Cube_FW_H7_V1.8.0 перестает работать, если служебное слово "const" из него уберу.


Отчего такое может быть? Есть какие-то области памяти для ДМА недоступные?