Stm32 запуск АЦП за таймером

Днями мені знадобилося раз в секунду запускати АЦП перетворення і відразу ж стало зрозуміло, що битами SMPR [2: 1]. які задають кількість тактів між вибірками, зробити це не вийде, тому доведеться шукати інший спосіб.
Максимальна кількість тактів між вибірками, яке можна задати за допомогою цих бітів, так само 239,5. Якщо до цього числа додати час перетворення - 12.5 тактів, то отримаємо період перетворення рівний 252 такту, в загальному, до 1 секунди дуже далеко.
Хотілося б нагадати, що джерелом зовнішнього запуску для регулярного перетворення можуть бути такі події:

Stm32 запуск АЦП за таймером


Тобто запускати перетворення можна по захопленню-порівнянні (ССХ event), переповнення таймера (TRGO), зовнішньому перериванню (EXTI line), або установкою біта SWSTART. Нам підходить запуск по переповнення таймера (TRGO), залишилося тільки розібратися як зробити, щоб таймер генерував той самий сигнал для запуску АЦП, але для початку давайте инициализируем його.

Для того щоб по переповнення таймера генерувався сигнал TRGO необхідно, дозволити це битами MMS. Master mode selection, тоді ініціалізація таймера буде виглядати так.

Тепер це все об'єднаємо.

В результаті кожну секунду буде запускатися АЦП, а отримувати результат перетворення можна або в перериванні, по закінченню перетворення, або використовуючи DMA.
Треба сказати, що в симуляторі програма не запрацювала як годиться, переривання то виникали одне один за іншим з паузою в декілька мілісекунд, то раз в секунду. Потім спробував налагодити програму в залозі, підключившись по jtag і поставивши breakpoint на сходинці temp = ADC1-> DR ;, але ефекту це не дало, програма працювала так само як в симуляторі. Пошукавши помилку і не знайшовши її, спробував для налагодження в реальному часі використовувати висновок SWO інтерфейсу SWD і як виявилося код працює майже правильно. У перериванні після перевірки на закінчення перетворення, виводив повідомлення, нібито "+1", всього за 10 секунд, мені видало 11 повідомлень, тобто відразу після включення таймера запускається перетворення, чому так відбувається мені поки не відомо, як розберуся обов'язково виправляю.

Схожі статті