Пищалка (бузер) для отладки микроконтроллеров STM32 и не только

Пищала как способ отладки

Идея не нова, обычно все старые вычислительные машины имели такую штучку (даже не на плате, а на проводах), которая могла по количеству пиков указать, что так или не так с машиной.

Звуковое оповещение часто намного удобнее, чем светодиод, потому что часто до него хрен доберешься, к тому же на него нужно смотреть (обычно ставлю в параллель и то и то). Есть довольно миниатюрные экземпляры, как сквозного, так и поверхностного монтажа.

Активная или пассивная

Предпочитаю вешать именно излучатель со встроенным генератором, потому что вешаю её на вывод PC13 (он слабый), к которому на отладочных платах и подключается светодиод.

Но, если есть возможность, можно прикрепить пассивный излучатель её к выводу, аппаратной ШИМ какого-то таймер, как у второй версии светодиодного тестера:

Схема подключения

Дабы не мучать вывод контроллера подключение через полевой транзистор. Можно сделать выбор питания 3.3V/5V/BAT, если нужно. Также обязательно ставить диод параллельно от выбросов ЭДС!

Библиотека

Запилил простейшую библиотечку, которая позволяет без особого напряга получать звук разной длительностью (задается первым аргументом) и количеством тиков (второй аргумент). Текущую версию можно взять на GitHubhttps://github.com/Egoruch/Buzzer-STM32-HAL

Создание проекта в STM32CubeIDE

1) Новый проект: File -> STM32 Project

2) Выбираем цель: черная пилюля STM32F401

3) Любое название:

4) Включаем отладчик: SYS -> Debug: Serial Wire

5) Для пассивного излучателя настраивается вывод как двухтактный выход, управление будет плюсом, по умолчанию оставляем низкий уровень, обязательно указать название (User Label): BUZZER

Для активного излучателя включаем тактирование таймера и выбираем генерирование ШИМ-сигнала, задаем частоту около 2,5 кГц (резонансная частота вашей пищалки), для этого смотрим, что таймер тактируется от 84 МГц (шину можно смотреть в документации), считаем значения для предделителя и регистра автоперезагрузки (отдаем предпочтение ему), ставим около 1000.

4) Сделать код (Alt + K):

Использование библиотеки

1) Добавить файлы buzzer.c в Src и buzzer.h в Inc:

2) Включить заголовочный файл в main.c

/* USER CODE BEGIN Includes */ #include "buzzer.h" /* USER CODE END Includes */

3) Открыть stm32f4xx_it.c в папке Src и добавить функцию обратного вызова в прерывание системного таймера:

/** * @brief This function handles System tick timer. */ void SysTick_Handler(void) { /* USER CODE BEGIN SysTick_IRQn 0 */ HAL_SYSTICK_Callback(); /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); /* USER CODE BEGIN SysTick_IRQn 1 */ /* USER CODE END SysTick_IRQn 1 */ }

4) Добавить функцию обратного вызова таймера с обработчиком бузера:

/* USER CODE BEGIN 4 */ /*** SYSTICK (T = 1ms) ***/ /** * @brief SYSTICK callback. * @retval None */ void HAL_SYSTICK_Callback(void) { BUZZER_Handler(); } /* USER CODE END 4 */

5) Всё, можно пробовать пикать:

/* USER CODE BEGIN 2 */ Buzzer_Go(TBUZ_100, TICK_2); HAL_Delay(2000); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { Buzzer_Go(TBUZ_50, TICK_4); HAL_Delay(2000); /* USER CODE END WHILE */

Итого

Ставил на платки самые распространенные D=12 мм, H=10мм, т.к. место позволяло, но есть и миниатюрные.

Это сильно помогало при написании прошивки, особенно с какими-то механизированными устройствами, где нужно отслеживать последовательность выполнения команд. Да и в общем, хорошо, когда нажимаешь на клавишу/кнопку и получаешь обратную связь.

215
RSS
Нет комментариев. Ваш будет первым!
Загрузка...