查看: 1075|回复: 0
打印 上一主题 下一主题

STM8S BEEP蜂鸣器输出2.7KHz例子

[复制链接]
跳转到指定楼层
沙发
发表于 2016-5-29 18:44:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM8S BEEP蜂鸣器输出2.7KHz

我用的是2.7KHz的无源贴片蜂鸣器.STM8S103K3.

标准模式下只能输出1,2,4KHz的频率.修改输出2KHz为2.7KHz.主要修改校准输入参数.

编译器:IAR for STM8 1.10.4
/* Fhsi = 16MHz/4 = 4MHz
   Fcpu = 4MHz/1 = 4MHz */
   
#include "stm8s.h"
#include "stm8s_beep.h"
#include "stm8s_flash.h"

#define BEEP_PORT GPIOD
#define BEEP_PIN GPIO_PIN_4

//注意,使用本程序前需要使用
//st visual programmer 把 Option Bytes 里  
//AFR7改为"Port D4 Alternate Function = Beep"  ,否则没有声音
//由于新增了在程序里修改AFR7改为"Port D4 Alternate Function = Beep"  ,则可以不必用stvp修改了

//北京微芯力科三合一开发套件,内部时钟,没有精确测试,仅凭感觉
/*void  delay(unsigned int Xms)
{
    unsigned int i ;
    while (Xms--)
    {   
        i = 120;
        while(i--);
    }
} */
//Fcpu = 4MHz/1 = 4MHz
/*延时子程序*/
void delay_ms(u16 time)
{
u16 i;
for(;time>0;time--)
  for(i=0;i<670;i++); //241
}
/*******************************************************************************  
*                         ==FLASH初始化函数==  
* FLASH_DeInit();                                           --> 复位FLASH的寄存器值  
* FLASH_Unlock(FLASH_MEMTYPE_DATA);                         --> 解锁 对 Data FLASHmemory 进行操作  
* FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);     --> 标准编程时间  
*******************************************************************************/  
void FLASH_INIT(void)  
{  
    FLASH_DeInit();  
    FLASH_Unlock(FLASH_MEMTYPE_DATA);  
    FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);  
}  

/* 本子函数修改为内部时钟
Fhsi = 16MHz/4 = 4MHz
Fcpu = 4MHz/1 = 4MHz */
void CLK_INIT(void)                 
{
  CLK_DeInit();
  //CLK_HSECmd(ENABLE);
  /* Enables the Internal High Speed oscillator (HSI). */
  CLK_HSICmd(ENABLE);
  /* Configure the HSI prescaler to 4 . Fhsi = 16MHz/4 = 4MHz */  
  /* Configure the Fcpu to DIV1 . Fcpu = 4MHz/1 = 4MHz */
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV4);
   
  /* Enables the Clock Security(安全) System. */
  CLK_ClockSecuritySystemEnable();
}

void GPIO_INIT(void)
{
    GPIO_DeInit(GPIOA);
    GPIO_DeInit(GPIOB);
    GPIO_DeInit(GPIOC);
    GPIO_DeInit(GPIOD);
    GPIO_DeInit(GPIOE);

}

void main ( void )
{      

    CLK_INIT();//设置外部时钟
    GPIO_INIT();//初始化IO

    FLASH_INIT();//初始化FLASH

    //PD4第二功能脚不是beep功能,就强制写成beep
    if(FLASH_ReadOptionByte(0x4803) != 0x807F)
    {
        FLASH_ProgramOptionByte(0x4803,0x80);//将PD4的第二功能脚写成beep
        WWDG->CR = 0x80;//复位stm8
    }

    //BEEP_LSICalibrationConfig(128000);
    BEEP_LSICalibrationConfig(95000);    //此处修改输入参数**************************************************
    BEEP_Init(BEEP_FREQUENCY_2KHZ);
    BEEP_Cmd(ENABLE);   

    while(1)
    {
        //delay(1000);
        delay_ms(500);
        BEEP_Cmd(ENABLE);
        //delay(1000);
        delay_ms(500);
        BEEP_Cmd(DISABLE);
    }  
}




参考:
stm8蜂鸣器(beep)发声实验,程序里修改OptionByte位,软件复位
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4183993&bbs_id=9999
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表