最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

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

IT圈 admin 33浏览 0评论

2024年4月2日发(作者:范姜雨彤)

.

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

一.说明:本例程是将流明LM3SLib_文档中的例程9及例程10(

PWM

应用:

蜂鸣器演奏乐曲),移植到STM32F103上。

二.流明LM3SLib_例程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"是演奏乐曲的驱动程

序。

.

2024年4月2日发(作者:范姜雨彤)

.

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

一.说明:本例程是将流明LM3SLib_文档中的例程9及例程10(

PWM

应用:

蜂鸣器演奏乐曲),移植到STM32F103上。

二.流明LM3SLib_例程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"是演奏乐曲的驱动程

序。

.

发布评论

评论列表 (0)

  1. 暂无评论