STM32F103通用定时器PWM应用例程--蜂鸣器演奏乐曲
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
#include
#include
#include
#include
#define PART_LM3S1138
#include
#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"是演奏乐曲的驱动程序。