完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
21个回答
|
|
以下 基于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); } } |
|
|
|
先去Option Byte,用编程Option byte方式Enable Beep功能,其实就是镜像复用功能,然后就可以去配置Beep啦。
|
|
|
|
|
|
|
|
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
|
|
|
|
main()
{ PD_DDR |= 0x10; // Output. PD_CR1 |= 0x10; //PushPull. while(1) { BEEP_CSR = 0x2E; } } |
|
|
|
印象里,STM8S中的BEEP还需要配置一下Option Byte,可以通过STVP来修改(烧写)Option Byte
|
|
|
|
|
|
|
|
还是没有解决额,有哪位大哥有试过STM8的BEEP功能呀?
|
|
|
|
EP968可以提供HSI和LSI校准功能,使Beep的频率一致性更好。
|
|
|
|
确认STM8S的引脚输出电流可以满足你的蜂鸣器的要求
|
|
|
|
还可以用示波器看看是否有输出波形。
|
|
|
|
蜂鸣器用三极管就可以驱动了,楼主,你用示波器测一下有没有输出波形就知道是软件问题还是硬件问题了
|
|
|
|
哦 有个东西想提醒下没用过内置BEEP单元的朋友:一旦内置BEEP使能,就自动进入LSI了,大家小心点
|
|
|
|
直接用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; |
|
|
|
GPIOD->DDR &=~ 0x10;//输入 改成推挽输出方式
|
|
|
|
没有吧,我这里有个产品是用内部高速振荡器的,也用了BEEP引脚,没有自动进入LSI啊
|
|
|
|
#define LSI_128kHz 128000 #define Beep_OptionAdd 0x4803 void BEEP_Config(BEEP_Frequency_TypeDef BEEP_Frequency) { BEEP_Init(BEEP_Frequency); BEEP_LSICalibrationConfig(LSI_128kHz); CLK_LSICmd(ENABLE); } 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_Unlock(FLASH_MEMTYPE_DATA); FLASH_ProgramOptionByte(Beep_OptionAdd, (uint8_t)((Beep_Option_status | 0x8000) >> 8)); FLASH_Lock(FLASH_MEMTYPE_DATA); /*向Beep_OptionAdd 0x4803 置1,激活了Beep*/ } } 使用 BEEP_Config(BEEP_FREQUENCY_2KHZ); Set_Beep_OptionByte(); BEEP_Cmd(ENABLE); 就会响了...无源蜂鸣器, 8050三极管 驱动即可 |
|
|
|
蜂鸣器是几V的,stm8输出是几V的
|
|
|
|
用编程Option byte方式Enable Beep功能
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
904 浏览 2 评论
哪位大神有MGC3130的STM32 i2C驱动例程分享一下,感谢感谢
4868 浏览 1 评论
stm32f103c8t6用中断采出来的数来回跳?怎么样才能稳定下来?
1796 浏览 2 评论
基于STM32F103C8T6控制多路VL53L0X激光测距传感器
2053 浏览 4 评论
STM32F103RCT6采集不同采样率传感器数据发送到位机数据不完整
2206 浏览 2 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-5-15 03:04 , Processed in 1.268403 second(s), Total 77, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191