STM32 cubeMX下配置STM32单片机使无源蜂鸣器输出PWM波并放音乐

您所在的位置:网站首页 stm32f103蜂鸣器音乐生成曲谱 STM32 cubeMX下配置STM32单片机使无源蜂鸣器输出PWM波并放音乐

STM32 cubeMX下配置STM32单片机使无源蜂鸣器输出PWM波并放音乐

2023-07-22 20:57| 来源: 网络整理| 查看: 265

1.首先我们要了解定时器(timer) timer分为三种:高级定时器(tim1,tim8),基本定时器(tim6,tim7),通用定时器(tim2,tim3,tim4,tim5)。 基本定时器:它有两个功能。第一就是生成时基,第二就是专门用于驱动数模转换器(DAC),我们这里要产生PWM波,这与它无关,所以不用过多了解它。 通用的定时器:可以输出四路PWM信号互不影响,它就是普通的调节PWM的占空比和频率。 高级定时器:可以输出三对互补PWM信号外加CH4通道,一共七路,它还带有互补输出功能,同时互补信号可以插入死区,也有使能刹车功能。 由于我做的单片机只用到了通用定时器。因此我对高级定时器也没有过多的了解。 2.PWM 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,PWM输出最基本的调节就是频率和占空比,接下来我们将了解PWM是如何产生的。 PWM的频率和占空比分别通过TIMX_ARR和TIMX_CCRX这两个寄存器控制,ARR寄存器就是自动重装寄存器(计数器记到这个数后清零在开始计数),在计数是会不停的和CCRX寄存器中的数据进行比较,如果小于的话就是高电平或者低电平(这取决于你设的PWM输出是高电平还是低电平有效如下图(是高电平有效)),计数值大于CCRX值这电平极性相反,这就控制了占空比。 下图是PWM原理图:在这里插入图片描述 ARR:决定PWM周期 CCRX:决定PWM的占空比 PWM的两种输出模式:在这里插入图片描述

3.STM32 cubeMX配置蜂鸣器

首先要使外部时钟使能,因为内部时钟频率不稳定 在这里插入图片描述 系统最大为80MHZ,就设为最大 由于我的芯片是TIM2-CH2产生PWM所以设置如下在这里插入图片描述

配置PWM的参数 输出频率=系统频率(80M)/[(PSC+1)*(ARR+1)] 由于一会要改变频率,所以可以先不设脉冲宽度

在这里插入图片描述 将TIM2的GPIO设置为下拉(因为PWM输出高低电平,GPIO下拉防止蜂鸣器误发出声音)并勾选 在这里插入图片描述 接下来就是生成代码,,勾选如下使其一个功能模块生成一个.c文件和一个.h文件 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 我一般选Open Project,因为比较方便在这里插入图片描述 在keil5中将出现如下.c文件 在这里插入图片描述 刚才我们配置的PWM参数在tim.c文件中就可以看到 在这里插入图片描述 接下来在tim.c中加入自己写的延时函数,不能调用系统,因为蜂鸣器的频率可能会不变 我的就没变。这段延时代码是我在网上百度的 在这里插入图片描述

void Delay_ms(int32_t nms) { int32_t temp; SysTick->LOAD = 8000*nms; SysTick->VAL=0X00; SysTick->CTRL=0X01; do { temp=SysTick->CTRL; } while((temp&0x01)&&(!(temp&(1VAL =0X00; }

接下来就在tim.c中的/* USER CODE BEGIN 1 / / USER CODE END 1 */之间加入自己的代码,以下是我的《两只老虎》的代码,如果你想放其他歌你把频率变一下就可以了。 链接:https://mp.csdn.net/mdeditor/88737012 然后在tim.h中声明你定义的变量及函数,不然会报错

最后在main.c中调用,记住一定要在GPIO和TIMX初始化之后,不然代码得不到调用 你也可以加在while(1)中 ,可以不断的放 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3