打印
[STM8]

STM8S中的BEEP怎么用?

[复制链接]
2266|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ousj|  楼主 | 2017-7-23 23:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM8S中的BEEP怎么用?
沙发
morrisk| | 2017-7-23 23:59 | 只看该作者

楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
板凳
skygz| | 2017-7-24 10:03 | 只看该作者
以下 基于STM8S库使用例

#ifndef __BEEP_H
#define __BEEP_H
#include "stm8s.h"

#define LSI_128kHz 128000

void BEEP_Config(BEEP_Frequency_TypeDef BEEP_Frequency, FunctionalState NewState);
void Set_Beep_OptionByte(void);

#endif
---------------------------------------------------------------------------
#include "beep.h"

#define Beep_OptionAdd  0x4803



void BEEP_Config(BEEP_Frequency_TypeDef BEEP_Frequency, FunctionalState NewState) {
  if (NewState) {
    BEEP_Init(BEEP_Frequency);
    BEEP_LSICalibrationConfig(LSI_128kHz);
    CLK_LSICmd(ENABLE);
    BEEP_Cmd(ENABLE);
  } else {
    BEEP_Cmd(DISABLE);
    //CLK_BEEPClockConfig(CLK_BEEPCLKSource_Off);
  }
}

void Set_Beep_OptionByte(void) {
  uint16_t Beep_Option_status;/*记录激活备选功能Beep的状态*/
  Beep_Option_status = FLASH_ReadOptionByte(Beep_OptionAdd);

  /*Beep_Option_status的最高位为1激活了Beep,否则不激活*/
  if(!(Beep_Option_status & 0x8000)) {
    FLASH_ProgramOptionByte(Beep_OptionAdd, (uint8_t)(Beep_Option_status | 0x8000));
    /*向Beep_OptionAdd  0x4803 置1,激活了Beep*/
  }
}
-------------------------------------------------------------------------------------------------
#include "stm8s.h"
#include "stm8s_clk.h"
#include "intrinsics.h"
#include "beep.h"

void BEEP_Alarm(u32 n) {
  BEEP_Config(BEEP_FREQUENCY_2KHZ, ENABLE);

  delay_ms(n);

  BEEP_Config(BEEP_FREQUENCY_2KHZ, DISABLE);
}

int main(void) {
  Set_Beep_OptionByte();
  while (1) {
    BEEP_Alarm(100);
    delay_ms(500);
  }
}

使用特权

评论回复
地板
grant_jx| | 2017-7-24 10:07 | 只看该作者
先去Option Byte,用编程Option byte方式Enable  Beep功能,其实就是镜像复用功能,然后就可以去配置Beep啦。

使用特权

评论回复
5
ousj|  楼主 | 2017-7-24 22:39 | 只看该作者

我就配置了BEEP所在的PD4为PUSHPULL,
主程序中就写了BEEP_CSR=0x2E

使用特权

评论回复
6
zyf部长| | 2017-7-24 22:43 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
7
ousj|  楼主 | 2017-7-24 22:45 | 只看该作者
main()
{   
   PD_DDR |= 0x10;       // Output.
PD_CR1 |= 0x10;    //PushPull.
while(1)
{
BEEP_CSR = 0x2E;
}
}

使用特权

评论回复
8
chuxh| | 2017-7-24 22:46 | 只看该作者

印象里,STM8S中的BEEP还需要配置一下Option Byte,可以通过STVP来修改(烧写)Option Byte

使用特权

评论回复
9
kangzj| | 2017-7-24 22:47 | 只看该作者


PD4 (HS)/BEEP/TIM5_CH1 [UART1_CK]
用[ ]框起来的功能才需要配置Option来选择吧。

使用特权

评论回复
10
ousj|  楼主 | 2017-7-24 22:47 | 只看该作者
还是没有解决额,有哪位大哥有试过STM8的BEEP功能呀?

使用特权

评论回复
11
chuxh| | 2017-7-24 22:48 | 只看该作者


EP968可以提供HSI和LSI校准功能,使Beep的频率一致性更好。

使用特权

评论回复
12
juventus9554| | 2017-7-24 22:49 | 只看该作者
确认STM8S的引脚输出电流可以满足你的蜂鸣器的要求

使用特权

评论回复
13
juventus9554| | 2017-7-24 22:50 | 只看该作者
还可以用示波器看看是否有输出波形。

使用特权

评论回复
14
zyf部长| | 2017-7-24 22:51 | 只看该作者

蜂鸣器用三极管就可以驱动了,楼主,你用示波器测一下有没有输出波形就知道是软件问题还是硬件问题了

使用特权

评论回复
15
llljh| | 2017-7-24 22:52 | 只看该作者

有源蜂鸣器

使用特权

评论回复
16
ousj|  楼主 | 2017-7-24 22:55 | 只看该作者

哦 有个东西想提醒下没用过内置BEEP单元的朋友:一旦内置BEEP使能,就自动进入LSI了,大家小心点。。。

使用特权

评论回复
17
dingy| | 2017-7-24 22:57 | 只看该作者
直接用TIM1脚打出4KHz占空比0.5的方波,蜂鸣器就响了;我用BEEP脚好像也没有响。
配置如下,有木有大神斧正:
GPIOD->DDR &=~ 0x10;//输入
GPIOD->CR1 |= 0x10;//使能上拉
GPIOD->CR2 &=~ 0x10;//禁止外部中断
BEEP->CSR = 0;//清BEEP寄存器
BEEP->CSR |= 0x0e;//预分频器开启 128KHz/16 = 8K
BEEP->CSR |= 0x8e;//BEEP 4KHz  @Lsi 128K
BEEP->CSR |= 0x20;

使用特权

评论回复
18
pengf| | 2017-7-24 22:58 | 只看该作者
GPIOD->DDR &=~ 0x10;//输入   改成推挽输出方式

使用特权

评论回复
19
renyaq| | 2017-7-24 22:58 | 只看该作者

没有吧,我这里有个产品是用内部高速振荡器的,也用了BEEP引脚,没有自动进入LSI啊

使用特权

评论回复
20
ousj|  楼主 | 2017-7-24 23:00 | 只看该作者

哦,那我就知道怎么回事了,多谢大家,结贴了哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

712

主题

7557

帖子

1

粉丝