Отказ от ответственности
Я должен признаться, что мой длительный практический опыт работы с STM32 к настоящему времени остался с основными семействами контроллеров, такими как STM32F0, STM32F3, STM32F4 и STM32L4. Поэтому я отвечаю на основании того, что эти контроллеры предложат вам в вашей ситуации. Серия STM32H7 намного сильнее, не говоря уже о том, что она предлагает несколько дополнительных технологий DMA, таких как DMA2D, MDMA и многие другие, в которых я не уверен. Но я думаю, что упрощенный ответ может также помочь вам на данный момент, поэтому я осмелюсь написать его.
Могу ли я использовать регистр CNT таймера в качестве источника передачи DMA? Будет ли это передача с периферийного устройства в память? Или передача из памяти в память? Есть ли другие флаги, которые мне нужны, чтобы эта работа работала? Или это невозможно?
Я бы ожидал, что это сработает. Я не вижу причины не читать регистр TIMx_CNT при передаче DMA.
Регистр CNT, безусловно, является периферийным адресом , поэтому вы должны настроить его как периферийное устройство к ... передача памяти. Я полагаю, что разделение периферии / памяти относится к шине, с которой контроллер DMA извлекает данные (или к какой шине он их доставляет) в матрице шин, реализованной в каждом STM32.
Или есть еще одна функция STM32, которая облегчит подсчет времени между импульсами?
Да, есть: многие из периферийных устройств TIM (не все одинаковые) предлагают вам функцию, называемую «захват ввода» который соединяет канал (под) периферийного устройства экземпляра TIM со входом и имеет часть main периферийного устройства (того же самого!) для выполнения внутреннего тактирования. Предварительным условием этого является то, что вывод, который вы хотите измерить, имеет альтернативную функцию TIMx_CHy, а не «только» функцию TIMx_ETR.
Периферийные устройства TIM предлагают богатый диапазон различных вариантов конфигурации - и сложную беспорядок, пока вы не привыкли к этому. В качестве вступления и хорошего обзора я рекомендую два замечания по применению из ST:
Просматривая эти два, я нашел третий, который вы могли бы проверить для большей точности, связанный с таймерами HRTIM: