Пищалка (бузер) для отладки микроконтроллеров STM32 и не только
Пищала как способ отладки
Идея не нова, обычно все старые вычислительные машины имели такую штучку (даже не на плате, а на проводах), которая могла по количеству пиков указать, что так или не так с машиной.
Звуковое оповещение часто намного удобнее, чем светодиод, потому что часто до него хрен доберешься, к тому же на него нужно смотреть (обычно ставлю в параллель и то и то). Есть довольно миниатюрные экземпляры, как сквозного, так и поверхностного монтажа.
Активная или пассивная
Предпочитаю вешать именно излучатель со встроенным генератором, потому что вешаю её на вывод PC13 (он слабый), к которому на отладочных платах и подключается светодиод.
Но, если есть возможность, можно прикрепить пассивный излучатель её к выводу, аппаратной ШИМ какого-то таймер, как у второй версии светодиодного тестера:
Схема подключения
Дабы не мучать вывод контроллера подключение через полевой транзистор. Можно сделать выбор питания 3.3V/5V/BAT, если нужно. Также обязательно ставить диод параллельно от выбросов ЭДС!
Библиотека
Запилил простейшую библиотечку, которая позволяет без особого напряга получать звук разной длительностью (задается первым аргументом) и количеством тиков (второй аргумент). Текущую версию можно взять на GitHub: https://github.com/Egoruch/Buzzer-STM32-HAL/tree/1.0.0
Создание проекта в 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мм, т.к. место позволяло, но есть и миниатюрные.
Это сильно помогало при написании прошивки, особенно с какими-то механизированными устройствами, где нужно отслеживать последовательность выполнения команд. Да и в общем, хорошо, когда нажимаешь на клавишу/кнопку и получаешь обратную связь.
Путина на виселицу!
Хуй тебе тварь убогая !!!
убогая тварь в чемоданчик гадит))) хотя наверное на болотах это нормально. сортиров же построить не умеете
Зелебобу на кол, хохлов в сартире мочить
Откуда выбросы ЭДС с пьезодинамика?
Там маленький динамик с катушкой, а не пьеза.
Мелодию как проиграть?