STM8S自学笔记-007 蜂鸣器:BEEP,定时器PWM,定时器中断

STM8S自学笔记-007.蜂鸣器


【修订记录】
1、20230207,第一版
2、20230502,表述修正

驱动方法

有多种方法驱动蜂鸣器
1、使用BEEP外设:配置最简单,缺点是输出频率的范围有限。
2、使用定时器的通道输出:配置最复杂,但频率几乎可任意指定、不受中断的干扰。
3、使用定时器中断:配置稍复杂,中断处理中要翻转蜂鸣器端口输出,中断频率应是鸣叫频率的2倍。

底层

我这片开发板的BEEP端口是PD4,刚好还是定时器2的输出通道1,所以将使用这两种外设来分别配置定时器。
在这里插入图片描述

/**
  ******************************************************************************
  * @file    buz_hal.c 
  * @author  
  * @version V1.0.0
  * @date    DD-MM-YYYY
  * @brief   
  ******************************************************************************
  */ 

/* Includes ------------------------------------------------------------------*/
#include "buz_hal.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Variables -----------------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Functions -----------------------------------------------------------------*/
/**
  * @brief  
  * @param  
  * @retval 
  */
#if BEEP_METHOD == BEEP_HARDWARE
void BUZ_HAL_BeepInit(BEEP_Frequency_TypeDef BEEP_Frequency)
{
    BEEP_DeInit();
    BEEP_Init(BEEP_Frequency);
    BEEP_Cmd(DISABLE);
}
#elif BEEP_METHOD == BEEP_TIM2_OC1
void BUZ_HAL_BeepInit(uint16_t BEEP_Frequency)
{
    TIM2_DeInit();
    TIM2_TimeBaseInit(TIM2_PRESCALER_16, 1000000/BEEP_Frequency);
    TIM2_OC1Init(TIM2_OCMODE_PWM1,
                 TIM2_OUTPUTSTATE_ENABLE,
                 (u16)(1000000/BEEP_Frequency/2),     
                 TIM2_OCPOLARITY_HIGH);
    TIM2_OC1PreloadConfig(ENABLE);                  //Enables the TIM2 Preload Register on CCR1
    TIM2_Cmd(DISABLE);
}
#endif

/**
  * @brief  
  * @param  
  * @retval 
  */
void BUZ_HAL_BeepCmd(FunctionalState NewState)
{
#if BEEP_METHOD == BEEP_HARDWARE
    BEEP_Cmd(NewState);
#elif BEEP_METHOD == BEEP_TIM2_OC1
    TIM2_Cmd(NewState);
#endif
}



/******************************************************************************/

应用层

目前处于系统调试阶段,应用层还未着手。
计划做一个蜂鸣时序表,让声音跟随预设的时序来出现,有点类似于乐谱,这要求必须使用定时器通道输出模式来控制频率。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值