超简单4行代码-STM32F103的HAL实现有源蜂鸣器报警

1、概述

在嵌入式项目开发中,使用蜂鸣器作为简单的报警或提示装置非常常见。根据不同的应用场景,我们可能会选择有源蜂鸣器或无源蜂鸣器。本文将重点介绍如何通过STM32F103系列单片机,利用HAL库,仅通过4行代码实现对有源蜂鸣器的控制,实现基本的报警功能。

2、无源蜂鸣器与有源蜂鸣器的区别

我们需要明确无源蜂鸣器和有源蜂鸣器的区别。有源蜂鸣器内部集成了震荡电路,只需提供直流电源即可发声,声音频率和音调通常由蜂鸣器内部电路决定,难以调整。而无源蜂鸣器则没有内置震荡电路,需要外部电路(如微控制器)提供一定频率的方波信号才能发声,因此声音频率和音调可以通过调整方波信号的频率来控制。

3、硬件连接

为了控制有源蜂鸣器,我们通常需要将其一端连接到STM32F103的一个GPIO引脚(假设为PB8),另一端通过一个三极管连接到地(或电源,取决于电路设计,但通常连接到地以简化电路)。三极管的作用是放大电流,这样,通过控制GPIO引脚的电平高低,可以控制三极管的导通与截止,进而控制有源蜂鸣器的发声。

4、软件实现

确保你已经在STM32CubeMX配置好PB8引脚为输出,并生成代码,编写下面4行代码实现“嘀嘀”的报警声。

  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
      HAL_Delay(1000);
	  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
      HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}

通过以上介绍,我们了解了如何在STM32F103上通过简单的4行代码实现有源蜂鸣器的报警功能。希望这对你的嵌入式开发之旅有所帮助!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于STM32F103C8T6的5V有源蜂鸣器报警程序设计的示例代码: 首先,需要在STM32CubeMX中配置GPIO,将蜂鸣器连接到GPIO引脚,然后在Pinout选项卡中将引脚模式设置为GPIO_Output。接下来,生成代码并打开MDK-ARM工程。 在main.c文件中,添加以下代码: ``` #include "stm32f1xx_hal.h" void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 设置GPIO引脚为高电平 HAL_Delay(500); // 延时500毫秒 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 设置GPIO引脚为低电平 HAL_Delay(500); // 延时500毫秒 } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } ``` 在上面的代码中,我们使用了HAL库提供的函数,首先初始化系统时钟,然后初始化GPIO引脚为输出模式。在主循环中,我们循环不断地将GPIO引脚设置为高电平,然后延时500毫秒,再将GPIO引脚设置为低电平,再延时500毫秒,以此循环,实现报警。 最后,编译并下载代码STM32F103C8T6开发板中,即可听到蜂鸣器的报警声。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值