本帖最后由 z4057 于 2015-8-11 12:40 编辑
STM8S003K3 BEEP_CSR 写不动 Beep功能启用不了
ST Visual Programmer OPTION BYTE里也没有 PD4复选beep功能
CKAWUSEL 高低速都试过了
LSI_EN 开关都试过了
CLK_ICKR=0x0d; // 上电后 LSI 开启了
void initBeep(void)
{
pointEEP=(uchar *)0x4803;
EEPvalue=*pointEEP;
if((EEPvalue&0x80)==0)
{
do
{
FLASH_DUKR=0xae;
FLASH_DUKR=0x56;
}while((FLASH_IAPSR&0x08)==0);//(!(FLASH_IAPSR&0x08));
FLASH_CR2=0x80;
FLASH_NCR2=0x7f;
*((uchar *)0x4803)=0x80;
// while((FLASH_IAPSR&0x04)==0);
*((uchar *)0x4804)=0x7f;
while((FLASH_IAPSR&0x04)==0);//(!(FLASH_IAPSR&0x04));
//bit7 NC =0;
//bit6 HVOFF:高压结束标志0=HV开,开始真正的编程;1=HV关,高压结束
//bit5~4 NC =0;
//bit3 DUL :EEP解锁标志 0=DATA EEPROM写保护使能;1=不能写DATA EEPROM区,需要通过FLASH_DUKR 写0x56+0xae 来解除 硬件置位;软件清0xae
//bit2 EOP :编程结束标志0=没有EOP事件发生;1=有EOP事件发生:如果FLASH_CR1中的IE=1;将有中断产生
//bit1 PUL :快速程序存储结束标志0=主程序写保护使能;1=需要通过FLASH_PUKR 来解除 硬件置位,软件清0
//bit0 WR_PG_DIS:试图向被保护页进行写操作的标志;0=没有WR_PG_DIS事件发生;1=有事件发生 如果IE=1则会产生中断
FLASH_IAPSR&=0xf7;
}
BEEP_CSR=0x0e; //0x50f3 0x1f BEEP控制/状态寄存器
//bit7~6 BEEPSEL[1~0]:蜂鸣器频率选择 00=输出Fls/(8*BEEPdiv)kHz; 01=输出Fls/(4*BEEPdiv)kHz; 1x=输出Fls/(2*BEEPdiv)kHz;
//bit5 BEEPEN:蜂鸣器允许位:'1'=使能蜂鸣器功能
//bit4~0 BEEPDIV: 蜂鸣器预分频器 0~1e >> BEEPdiv=2;3;4;...32; 0x1f不能设置 会无输出
BEEP_CSR=0x8e; // BEEP_CSR|=0x80;
BEEP_CSR=0xae;// BEEP_CSR|=0x20;
}
程序强行把 OPT2改为 0x80 也不行
请大家帮个忙
是 STM8S003K3 硬件上没有Beep功能还是 程序上哪里没有开
|