 |
Приклад скінченного автомата,
який визначає чи двійкове число
має непарну кількість 0.
(c) Wiki |
Чим простіший код, тим краще. Код, де пінами ECHO та TRIG
керують окремі таймери відносно простий. Однак, з одного боку, таймери -- ресурс цінний
та обмежений. На STM32F100, котрим обладнана наша плата, таймерів,
здатних генерувати PWM -- д
есяток, але вони сильно відрізняються за можливостями. Для реальних пристроїв це не так вже і багато! З іншого боку,
частина таймерів мають багато каналів. (Для цього контролера п'ять -- по 4
канали, три -- по 2, і три -- єдиний (комплементарні не рахуючи).
Захоплення
ШІМ, на яке ми покладаємося, потребує двох каналів, генерація TRIG --
ще одного. Отож, одного таймера для керування далекоміром має
вистачити.
Заради простоти я не став вішати на четвертий канал ШІМ для візуального
відображення віддалі світлодіодом. Залишимо це на домашнє завдання.
Видається, це можливо, хоч гарантії, не зробивши, не дам.
Користуватимемося
таймером TIM3, його CH1 i CH2 займатимуться захопленням ECHO, а CH3 --
TRIG. Тому, без використання
ремапінгу, апаратна конфігурація така:
- TRIG -- PA6 (TIM3_CH1)
- ECHO -- PB0 (TIM3_CH3)
- PC8 -- синій світлодіод
- PC9 -- зелений світлодіод
Думаю, можна зробити краще, вважатимемо приклад нижче лише технологічною демонстрацією.
Логіка роботи програми