发出声音和关闭。
蜂鸣器是的音调改变实际上是通过改变驱动蜂鸣的高低电平的翻转频率来决定,高
10
f低电平的变化的频率不同,音调不同,在此次设计中采用TIM1的PWM的频率变化来控制。
424PWM输出频率计算:TIM定时器相关配置:voidTIM_yi
gyueu
sig
edi
tNoteSet
staticu
sig
edcharIfIsI
it0ifIfIsI
it0TIM_TimeBaseI
itTypeDefTIM_TimeBaseStructureTIM_OCI
itTypeDefTIM_OCI
itStructureTIM_TimeBaseStructureTIM_PeriodNoteSetTIM_TimeBaseStructureTIM_Prescaler0TIM_TimeBaseStructureTIM_Cou
terModeTIM_Cou
terMode_UpTIM_TimeBaseI
itTIM1TIM_TimeBaseStructurePWM1Modeco
figuratio
Cha
el4TIM_OCI
itStructureTIM_OCModeTIM_OCMode_PWM1TIM_OCI
itStructureTIM_OutputStateTIM_OutputState_E
ableTIM_OCI
itStructureTIM_PulseNoteSet2TIM_OCI
itStructureTIM_OCPolarityTIM_OCPolarity_HighTIM_OC1I
itTIM1TIM_OCI
itStructure
TIM_CtrlPWMOutputsTIM1ENABLETIM_CmdTIM1ENABLEIfIsI
it1elseTIM1ARRNoteSet
11
fTIM1CCR1NoteSet2
TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。TIM_Prescaler设置了用来作为TIM1时钟频率除数的预分频值。TIM_Cou
terMode选择了计数器模式为向上计数模式。TIM_OCMode选择定时器模式为TIM脉冲宽度调制模式1。TIM_OutputStateTIM_OutputState_E
able定时器输出比较状态使能。TIM_Pulse设置了待装入捕获比较寄存器的脉冲值和TIM_Period的值一起决定占空比。TIM_OCPolarity设置了输出比较极性为高。
根据以上设置PWM输出占空比TIM_Period502
41
PWM输出频率
1TIM_Prescaler1TIM_Period
72MHz
42
在主函数中,通过扫描按键的状态来执行相关操作:
ifGPIO_ReadI
putDataBitGPIOBGPIO_Pi
_150
display1
数码管显示函数
TIM_yi
gyueD1调用定时器函数
注:每次调用TIM_yi
gyue()函数,通过判断IfIsI
it的状态,直接通过修改
ARR(自动重装载寄存器),CCR1(TIM1捕获比较寄存器1来修改频率,提高了程序
的效率,避免其他相关值重复定义。
五、设计结果及分析
12
f51设计结果:实现了简易电子琴功能。按下不同按键,发出不同1、2、3、4、5、6、7七
个音符并用LED显示当前的键值。每个音符发音的长短由按键按下的时间长短来控制,能够更好的完成一首歌曲。
PWM输出波形下列各图所示:DO:
Rai:
图51DoPWM输出波形
图52RaiPWM输出波形
13
fMi:
Fa:
图53MiPWM输出波形
So:
图54FaPWM输出波形
图55SoPWM输出波形
14
fLa:
Xi:
图56LaPWM输出波形
图57XiPWM输出波形
52结果分析:初次软硬件联调的时候,蜂鸣器发出的音符虽然也是七个调,但是声音明显不清脆。
结合软r