Кочерга, добрый вечер, я посмотрел вашу схему и должен сказать, что ваш подход с генерацией точного числа импульсов таймером для обхода отсутствия аппаратного триггера SPI - это реально остроумно. Вы мыслите в правильном направлении, я думаю.
Мне кажется на остальных таймерах можно эмулировать поведение. Попробуйте настроить One-pulse mode, но не используйте аппаратный счетчик повторения, а подсчет нужного количества импульсов перенести в программную часть.
Попробуйте эту схему:
Переведите таймер в One-Pulse Mode, включите прерывание по событию UEV, в обработчике прерывания HAL_TIM_PeriodElapsedCallback заведите статическую переменную-счетчик. При каждом вызове прерывания -
Увеличивайте значение счетчика на 1. Если значение достигло 24, сбрасывайте счетчик на 0, и вручную снова запускайте таймер, взводя бит CEN. Импульсная последовательность на выходе прекратится.
Когда таймер в STM32 получает команду запуститься по DRDY, он синхронизирует этот сигнал со своей внутренней тактовой частотой. Эта задержка плюс задержка на выходном компараторе может составлять десятки наносекунд. В результате фронт первого SCK от таймера может приходить слишком рано, когда АЦП еще не установил первый бит данных, или слишком поздно, и STM32 в режиме SPI Slave не успевает захватить данные до прихода следующего фронта. Удачи в вашем деле! Пишите, отвечу как время будет.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Мне кажется на остальных таймерах можно эмулировать поведение. Попробуйте настроить One-pulse mode, но не используйте аппаратный счетчик повторения, а подсчет нужного количества импульсов перенести в программную часть.
Попробуйте эту схему:
Переведите таймер в One-Pulse Mode, включите прерывание по событию UEV, в обработчике прерывания HAL_TIM_PeriodElapsedCallback заведите статическую переменную-счетчик. При каждом вызове прерывания -
Увеличивайте значение счетчика на 1. Если значение достигло 24, сбрасывайте счетчик на 0, и вручную снова запускайте таймер, взводя бит CEN. Импульсная последовательность на выходе прекратится.
Когда таймер в STM32 получает команду запуститься по DRDY, он синхронизирует этот сигнал со своей внутренней тактовой частотой. Эта задержка плюс задержка на выходном компараторе может составлять десятки наносекунд. В результате фронт первого SCK от таймера может приходить слишком рано, когда АЦП еще не установил первый бит данных, или слишком поздно, и STM32 в режиме SPI Slave не успевает захватить данные до прихода следующего фронта. Удачи в вашем деле! Пишите, отвечу как время будет.