没有合适的资源?快使用搜索试试~ 我知道了~
stm32f103通用定时器pwm应用例程蜂鸣器演奏乐曲.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 179 浏览量
2023-06-06
20:59:10
上传
评论
收藏 113KB DOC 举报
温馨提示
试读
13页
stm32f103通用定时器pwm应用例程蜂鸣器演奏乐曲.doc
资源推荐
资源详情
资源评论
STM32F103通用定时器PWM应用例程:蜂鸣器演奏乐曲
一.说明:本例程是将流明LM3SLib_Timer.pdf文档中的例程9及例程10(PWM应用:
蜂鸣器演奏乐曲),移植到STM32F103上。
二.流明LM3SLib_Timer.pdf例程9及例程10的拷贝:
例程9. Timer PWM应用:蜂鸣器发声
如图 1.1 所示,为 EasyARM1138 开发板上的蜂鸣器驱动电路。蜂鸣器类型是交流蜂鸣器,也称
无源蜂鸣器,需要输入一列方波才能鸣响,发声频率等于驱动方波的频率。
图 1.1 蜂鸣器驱动电路
程序清单1.9是Timer模块16位PWM模式的一个应用,可以驱动交流蜂鸣器发声,运行后蜂鸣
器以不同的频率叫两声。其中"buzzer.h"和"buzzer.c"是蜂鸣器的驱动程序,仅有3个驱动函数,用
起来很简捷。
程序清单 1.9 Timer PWM 应用:蜂鸣器发声
文件:main.c
#include "systemInit.h"
#include "buzzer.h"
// 主函数(程序入口)
int main(void)
{
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:晶振,6MHz
buzzerInit(); // 蜂鸣器初始化
buzzerSound(1500); // 蜂鸣器发出1500Hz声音
SysCtlDelay(400* (TheSysClock / 3000)); // 延时约400ms
buzzerSound(2000); // 蜂鸣器发出2000Hz声音
SysCtlDelay(800* (TheSysClock / 3000)); // 延时约800ms
buzzerQuiet( ); // 蜂鸣器静音
for (;;)
{
}
}
文件:buzzer.h
#ifndef __BUZZER_H__
#define __BUZZER_H__
// 蜂鸣器初始化
extern void buzzerInit(void);
// 蜂鸣器发出指定频率的声音
extern void buzzerSound(unsigned short usFreq);
// 蜂鸣器停止发声
extern void buzzerQuiet(void);
#endif // __BUZZER_H__
文件:buzzer.c
#include "buzzer.h"
#include <hw_types.h>
#include <hw_memmap.h>
#include <sysctl.h>
#include <gpio.h>
#include <timer.h>
#define PART_LM3S1138
#include <pin_map.h>
#define SysCtlPeriEnable SysCtlPeripheralEnable
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput
// 声明全局的系统时钟变量
extern unsigned long TheSysClock;
// 蜂鸣器初始化
void buzzerInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1); // 使能TIMER1模块
SysCtlPeriEnable(CCP3_PERIPH); // 使能CCP3所在的GPIO端口
GPIOPinTypeTimer(CCP3_PORT, CCP3_PIN); // 设置相关管脚为Timer功能
TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR | // 配置TimerB为16位PWM
TIMER_CFG_B_PWM);
}
// 蜂鸣器发出指定频率的声音
// usFreq是发声频率,取值 (系统时钟/65536)+1 ~ 20000,单位:Hz
void buzzerSound(unsigned short usFreq)
{
unsigned long ulVal;
if ((usFreq <= TheSysClock / 65536UL) || (usFreq > 20000))
{
buzzerQuiet( );
}
else
{
GPIOPinTypeTimer(CCP3_PORT, CCP3_PIN); // 设置相关管脚为Timer功能
ulVal = TheSysClock / usFreq;
TimerLoadSet(TIMER1_BASE, TIMER_B, ulVal); // 设置TimerB初值
TimerMatchSet(TIMER1_BASE, TIMER_B, ulVal / 2); // 设置TimerB匹配值
TimerEnable(TIMER1_BASE, TIMER_B); // 使能TimerB计数
}
}
// 蜂鸣器停止发声
void buzzerQuiet(void)
{
TimerDisable(TIMER1_BASE, TIMER_B); // 禁止TimerB计数
GPIOPinTypeOut(CCP3_PORT, CCP3_PIN); // 配置CCP3管脚为GPIO输出
GPIOPinWrite(CCP3_PORT, CCP3_PIN, 0x00); // 使CCP3管脚输出低电平
}
例程10.Timer PWM应用:蜂鸣器演奏乐曲
程序清单1.10是Timer模块16位PWM模式的一个应用,能驱动交流蜂鸣器演奏一首
动听的乐曲《化蝶》(乐谱参见图1.2)。"music.h"和"music.c"是演奏乐曲的驱动程
序。
图 1.2 乐谱《化蝶》
简谱是大众化的音乐记谱方式,比较容易理解和掌握。我们可以把一首乐谱(score)看成是
由若干个基本的音符(note)单元组成。一个音符由音名和时值组成。音名就是低音、中音、高
音的 1234567(唱作 do re mi fa sol la si),其本质是音符的发声频率。在头文件"music.h"里,用 L1~
L7、M1~M7、H1~H7 定义了低音、中音、高音所对应的发声频率。时值是音符的发声时间长
短,有全音符、二分音符、四分音符⋯⋯等等。音符可以后缀一个“符点”,表示时值增加 1/2,特
殊地,二分音符加符点时用“-”代替圆点。参见表 1.26 的描述。
表 1.26 常见简谱音符示例
音 符
名 称
相 对 时 值
5―――
全音符
T
5-
二分音符
T/2
5
四分音符
T/4
5
八分音符
T/8
5
十六分音符
T/16
5――
符点二分音符
T/2+T/4
5.
符点四分音符
T/4+T/8
5.
符点八分音符
T/8+T/16
在头文件"music.h"里定义有一个音符结构体 tNote,有两个数据成员:音名 mName 和时值
mTime。在 C 文件"music.c"里定义有一个 tNote 型常量数表 MyScore[ ],用来保存实际乐谱转换
成 tNote 格式的数据。有了上述一点点乐谱基础知识,我们就可以很方便地编辑这个数表了。比
如音符“3”转换为“{M3, T/4}”,音符“3.”转换为“{M3, T/4+T/8}”,等等。在"music.c"里,已经在
数表 MyScore[ ]里给出了乐谱《化蝶》开头一部分音符转换结果,其余部分请感兴趣的读者补充
完整。
程序清单1.10 Timer PWM应用:蜂鸣器演奏乐曲
文件:main.c
#include "systemInit.h"
#include "buzzer.h"
#include "music.h"
// 主函数(程序入口)
int main(void)
{
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:晶振,6MHz
buzzerInit(); // 蜂鸣器初始化
for (;;)
{
musicPlay();
SysCtlDelay(4000 * (TheSysClock / 3000));
}
}
剩余12页未读,继续阅读
资源评论
oligaga
- 粉丝: 50
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 111111111111111111
- Screenshot_2024-04-30-21-47-24-26.jpg
- Cpp1.cpp1111111111
- 利用ERP流程操作的整个订单流程.ppt
- 最新二开版本源码博客论坛源码,UI很漂亮,可切换皮肤界面.rar
- ModStartBlog现代化个人博客系统 v5.2.0源码.rar
- 带posix库的mingw编译器
- SoraAI是一款功能强大的AI助手,由OpenAI开发,以其出色的语音识别技术、广泛的知识库和高度的人工智能特性而备受瞩目
- Thinkphp开发大气响应式个人博客青春博客网站源码.rar
- 最新PHP博客网站程序源码 ThinkPHP.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功