Статус:
Offline
Реєстрація: 10.03.2007
Повідом.: 8262
Реєстрація: 10.03.2007
Повідом.: 8262
- 🟡 17:30 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
- #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.