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
|