Статус:
Offline
Реєстрація: 10.03.2007
Повідом.: 8263
Реєстрація: 10.03.2007
Повідом.: 8263
- 🔴 21:27 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
- #1
STM32F103RC. Втручання в роботу DMA під час запису до Flash
Є проект на GNU ARM Eclipse для STM32F103RC. У ньому перший канал DMA1 циклічно зчитує 7 значень по 32 біти з ADC1->DR до буфера в SRAM. Запит надходить кожні 21 мкс від ADC1, що знаходиться у подвійному режимі з ADC2.
ADC1 безперервно оцифровує аналогові входи: ADC12_IN8, ADC12_IN15, ADC12_IN14, ADC12_IN4, ADC123_IN3, ADC1_IN16 (Vsense) і ADC1_IN17 (Vrefint). Після одного програмного запуску перетворення на етапі ініціалізації, результати у такій послідовності безперервно потрапляють до буфера, оновлюючи попередні результати.
Все так і було, поки не знадобилося зберігати кілька параметрів. Для цього зі сайту STMicroelectronics взяв приклад "EEPROM emulation in STM32F10x microcontrollers". Після стирання сторінки (20 мс) або запису параметра (20 мкс) послідовність результатів у буфері змінюється.
Складається враження, що запис до Flash блокує роботу DMA. Будь ласка, тикніть носом: де про це написано? Поки що роблю так:
Є проект на GNU ARM Eclipse для STM32F103RC. У ньому перший канал DMA1 циклічно зчитує 7 значень по 32 біти з ADC1->DR до буфера в SRAM. Запит надходить кожні 21 мкс від ADC1, що знаходиться у подвійному режимі з ADC2.
ADC1 безперервно оцифровує аналогові входи: ADC12_IN8, ADC12_IN15, ADC12_IN14, ADC12_IN4, ADC123_IN3, ADC1_IN16 (Vsense) і ADC1_IN17 (Vrefint). Після одного програмного запуску перетворення на етапі ініціалізації, результати у такій послідовності безперервно потрапляють до буфера, оновлюючи попередні результати.
Все так і було, поки не знадобилося зберігати кілька параметрів. Для цього зі сайту STMicroelectronics взяв приклад "EEPROM emulation in STM32F10x microcontrollers". Після стирання сторінки (20 мс) або запису параметра (20 мкс) послідовність результатів у буфері змінюється.
Складається враження, що запис до Flash блокує роботу DMA. Будь ласка, тикніть носом: де про це написано? Поки що роблю так:
Код:
ADC_Cmd(ADC1, DISABLE); // Заборона ADC1.
// Збереження до Flash…
ADC_Cmd(ADC1, ENABLE); // Дозвіл ADC1.