STM32F103通用定时器PWM应用例程--蜂鸣器演奏乐曲

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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"是演奏乐曲的驱动程序。

相关文档
最新文档