注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

chenht7的个人空间 http://home.eeworld.com.cn/space-uid-490705.html [收藏] [复制] [分享] [RSS]

日志

学STM8-4-程序-Beep_20180112

已有 509 次阅读2018-1-12 16:43 |个人分类:STM8

 学STM8-4-程序-Beep
---
2018/1/12

# 一、内容概述  
## 1.1 主要功能
该实验的目的是为了能够产生所需要的蜂鸣器的型号,从而能够有节奏的在对应的端口中输出对应的信号。

## 1.2 整体框架

[整体框图]

# 二、开发环境  
## 2.1 开发环境
开发环境,采用了IAR进行开发。并且目前所用的下载器和仿真器为ST-Link。而使用的硬件板子,为外购的开发核心板。
其中的那个将单片机信息传输给电脑所用的USART芯片采用了RS2323。
单片机型号:STM8S103F3P6

## 2.2 硬件连接

暂时就不接实际了,一般来说就是个蜂鸣器,搞个三极管加二极管和电阻进行一下搭配。就找了个网站中的内容。

[蜂鸣器驱动电路]

目前的硬件连接方式为:
输入引脚:无

输出引脚:
芯片中的PD4 <-- 该引脚具有BEEP的复用功能

# 三、库
## 3.1 调用的系统库
库的调用,需要根据实际的实验要求来进行。在这个实验中,
需要进行数据的输入和输出的功能 <-- 调用GPIO库,不过貌似本程序中也没怎么写
系统需要正常运行 <-- 调用时钟管理的CLK库
试验中,激活BEEP功能,是通过判断FLASH中的某一位进行实现 <-- FLASH库
主角库,毕竟是为了驱动蜂鸣器嘛 <-- BEEP库

## 3.2 自编的库
自己需要进行编写的库为两个方面。
实际的调用蜂鸣器的功能 <-- BEEP.c
主控 <-- 也就是写个main.c,对于整体库的处理方式说明

# 四、函数
## 4.1 说明
这个程序比较简单。而查阅一些对应的资料也可以发现,设计到蜂鸣器的内容和操作函数其实比较少的。

## 4.2 main.c
备份数据的寄存器。可以用来写入用户数据。

[main流程图]

```
#include "stm8s.h"
#include "beep.h"
#include "uart.h"

void Delay(u32 nCount);

int main(void)
{
  /* Infinite loop */
  /*设置内部时钟16M为主时钟*/ 
 
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
   /*!<Set High speed internal clock  */
  Set_Beep_OptionByte();
  Beep_Init(BEEP_FREQUENCY_2KHZ);
  BEEP_LSICalibrationConfig(LSI_128kHz);

  while (1)
  {
    /*  目前空代码而已  */    
  }
}

//这个函数在目前其实是没有用到
void Delay(u32 nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {
    nCount--;
  }
}
```


## 4.3 beep
### 4.3.1 beep.h
这个库主要作为为对于一些信息进行预定义。其中的两个主要函数功能见下文。

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

#define LSI_128kHz 128000

//初始化函数
void Beep_Init(BEEP_Frequency_TypeDef BEEP_Frequency);
//蜂鸣器动作函数
void Set_Beep_OptionByte(void);

#endif
```

### 4.3.2 beep.c


```
#include "beep.h"
#define Beep_OptionAdd  0x4803  //注意下!!初始值,讯用了FLASH中的复用功能重映射区域

//初始化:配置蜂鸣器输出频率-->开启内部LSI(128kHz)-->开启蜂鸣器
void Beep_Init(BEEP_Frequency_TypeDef BEEP_Frequency)
{
  BEEP_Init(BEEP_Frequency);
  CLK_LSICmd(ENABLE);
  BEEP_Cmd(ENABLE);
}

//读控制蜂鸣器位-->判断是否需开启-->需开启时,进行动作
void Set_Beep_OptionByte(void)
{
  uint16_t Beep_Option_status;/*记录激活备选功能Beep的状态*/

  //读取Beep_OptionAdd中的数据
  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*/
  }
}

```


# 五、实际效果
程序编完了,大致的实现效果就用这个波形图来进行表现吧。

[示波器波形图]

# 六、总结
这个项目,因为其中的内容中多了一个关于FLASH的实际应用,所以可能相比较而言,稍微复杂一些。不过整体的结构很简单易懂。只要配置好蜂鸣器,启用蜂鸣器就好了。Flash也只是多了一个位用于判断而已。

# 参考资料
[1] 风驰iCreate嵌入式开发工作室,LED的开发文件.  
[2] 《STM8S库函数中文参考 v1.0》, BH7KQK  
[3] ST公司,《RM0016 参考手册,STM8S微控制器家族》[M].
[4] ST公司,《Access line, 16 MHz STM8S 8-bit MCU, up to 8 Kbytes Flash, data
EEPROM,10-bit ADC, 3 timers, UART, SPI, I2C》
[5] 野火团队,《零死角玩转STM32》[M].  
[6] ST公司,《PM0051 Pragramming manual,How to program STM8S and STM8A
Flash program memory and data EEPROM》[M].
[7] ST公司,《数据手册 STM8S103K3STM8S103F3 STM8S103F2》[M].
[8] simonmao8385,单片机蜂鸣器,(http://forum.eepw.com.cn/thread/262615/1.)

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2018-10-16 15:51 , Processed in 0.020275 second(s), 10 queries , Gzip On, MemCache On.

Powered by EEWORLD电子工程世界

© 2018 http://bbs.eeworld.com.cn/

返回顶部