STM32
直播中

李建设

7年用户 1316经验值
私信 关注
[问答]

STM8S003K3 Beep功能启用不了的原因?如何解决?

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功能还是 程序上哪里没有开


回帖(1)

敷衍作笑谈

2024-5-13 17:32:42
STM8S003K3 Beep功能启用不了的原因可能有以下几点:

1. 配置错误:确保你已经正确配置了BEEP_CSR寄存器和OPTION BYTE。

2. 时钟设置问题:检查你的时钟设置是否正确,确保LSI时钟已经开启。

3. 寄存器写入问题:检查你的代码是否正确写入了BEEP_CSR寄存器。

4. 硬件问题:如果以上步骤都无法解决问题,可能是硬件本身存在问题。

针对你提供的代码,我有一些建议:

1. 确保你已经正确设置了OPTION BYTE,包括PD4复选beep功能和CKAWUSEL高低速。

2. 检查你的时钟设置,确保LSI时钟已经开启。你已经设置了CLK_ICKR=0x0d,这应该是正确的。

3. 在你的initBeep函数中,确保你已经正确写入了BEEP_CSR寄存器。你的代码中有一些语法错误,我帮你修改了一下:

```c
void initBeep(void) {
    uchar *pointEEP = (uchar *)0x4803;
    uchar EEPvalue = *pointEEP;
    if ((EEPvalue & 0x80) == 0) {
        // Enable beep function
        BEEP_CSR |= BEEP_CSR_BEEPEN;
    }
}
```

4. 如果以上步骤都无法解决问题,建议检查硬件是否存在问题。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分