Разработка копировщика флоппи дисков (Floppy Deuce). Часть 2
STM32CubeMX. Конфигурирование таймеров для симуляции сигналов READ_DATA и INDEX от флоппи диска.
На первоначальном этапе разработки копировщика мы не будем использовать флоппи привод, а будем симулировать необходимые сигналы для отладки программы.
Для симуляции READ_DATA (данные дорожки) используем таймер TIM10, а для симуляции INDEX (индекс от диска) таймер TIM11. Это два простых таймера общего назначения. Функциональную диаграмму для таймеров можно посмотреть на картинке:
На вкладке Pinout ищем элементы TIM10, TIM11 и конфигурируем их как показано на картинке. Данная конфигурация переводит таймеры в PWM режим, который позволит использовать таймеры в режиме генератора импульсов с заданным периодом и заданной скважностью импульсов
Переходим на вкладку Configuration. На этой вкладке в разделе Control появились две кнопки TIM10 и TIM11:
Конфигурирование TIM10.
Нажимаем кнопку TIM10 для конфигурации таймера. В появившемся окне на вкладке Parameter Settings производим настройку параметров работы таймера как показано на картинке
- Согласно функциональной диаграммы таймеров сигнал CK_PSC подается с шины APB2 на Prescaler.
Частота на выходе Prescaler рассчитывается по формуле CK_CNT = CK_PSC / (Prescaler + 1)
В нашем случае,
CK_PSC = 96 МГц (сконфигурировано в Clock Configuration)
Prescaler = 0
Получаем CK_CNT = 96 МГц- Затем CK_CNT подается на счетчик с перезагрузкой. По достижении значения заданного в Counter Period происходит перезагрузка счётчика.
Частота на выходе счетчика CNT рассчитывается по формуле CNT = CK_CNT / (Counter Period + 1)
В нашем случае,
CK_CNT = 96 МГц
Counter Period = 191
Получаем CNT = 0,5 МГц что соответствует скорости передачи MFM 500 кбит/с (вся дорожка заполнена 0)- Значение Pulse заносится в Compare 1 регистр, с помощью этого регистра формируется заданная скважность импульса.
Скважность рассчитывается по формуле Duty = Pulse * 100 / (Counter Period + 1)
В нашем случае,
Pulse = 144
Counter Period = 191
Получаем Duty = 75 %
Таким образом мы сконфигурировали TIM10 на генерацию импульсов с периодом 2 мкс и скважностью 25 % (0,5 мкс) отрицательный полупериод и 75 % (1,5 мкс) положительный полупериод.
Вкладку NVIC Settings оставляем без изменений, так как она предназначена для разрешения прерываний, но прерывания нам и не нужны
Переходим на вкладку GPIO Settings и видим что Cube выделил ножку PB8 микроконтроллера для вывода сигнала OC1 от таймера TIM10. Производим настройку выхода микроконтроллера согласно картинке
Хочется подчеркнуть, что User Label это имя для физического входа/выхода микроконтроллера и Cube сгенерирует #define с заданным именем, что позволит нам пользоваться именами и в дальнейшем легко переназначать входы/выходы микроконтроллера.
Конфигурирование TIM11.
Конфигурирование TIM11 производится аналогично TIM10. Нажимаем кнопку TIM11 для конфигурации таймера. В появившемся окне на вкладке Parameter Settings производим настройку параметров работы таймера как показано на картинке
Таким образом мы сконфигурировали TIM11 на генерацию импульсов с периодом 200 мc и скважностью 2 % (4 мс) отрицательный полупериод и 98 % (196 мс) положительный полупериод.
Вкладку NVIC Settings также оставляем без изменений
Переходим на вкладку GPIO Settings и производим настройку выхода микроконтроллера согласно картинке
На этом мы завершили конфигурацию таймеров для симуляции сигналов READ_DATA и INDEX от флоппи диска.
Комментарии
Трекбэков
Всего трекбэков 0
Ссылка трекбэка: