stm32CUbeMX 电子琴代码 stm32电子琴原理图

您所在的位置:网站首页 八音琴的发音原理 stm32CUbeMX 电子琴代码 stm32电子琴原理图

stm32CUbeMX 电子琴代码 stm32电子琴原理图

2024-07-14 02:19| 来源: 网络整理| 查看: 265

stm32CUbeMX 电子琴代码 stm32电子琴原理图_经验分享

文章目录前言一、实验内容二、电路连线三、发音原理四、STM32cubeMX配置4.1配置GPIO4.2配置定时器五、软件部分总结

前言

好久都没有写cube相关的内容了,今天来学习用STM32控制不同的开关,实现电子琴功能。

硬件:STM32ZET6 软件:keil 5

一、实验内容

实现电子琴功能,控制不同的开关,可以实现不同频率的音频输出,完成歌曲《一闪一闪亮晶晶》的演奏。

stm32CUbeMX 电子琴代码 stm32电子琴原理图_stm32_02

按照建议电路连线后,==PB.14(TIM1的ch2)==控制蜂鸣器的输入引脚CTRL。8个开关可以用作不同频率的音频输出控制开关。

二、电路连线

我们可以看到8个按键连接着8个IO口,并且是上拉高电平。也就意味着我们按下去的时候,这个IO口就会变成低电平。这也是我们软件判断的依据之一。

这里是PC0到PC7,八个开关。

stm32CUbeMX 电子琴代码 stm32电子琴原理图_stm32CUbeMX 电子琴代码_03

三、发音原理

1:如果PWM的频率落在交流蜂鸣器的发音区,交流蜂鸣器就可以发出音调,调节PWM的占空比,可以调节音量。 所以很简单,我们只要改变PWM波的频率。就可以发出我们常用的八个音。

stm32CUbeMX 电子琴代码 stm32电子琴原理图_经验分享_04

那么如何改变频率呢,肯定是改变PSC,ARR的值。我们改一个就行了。就ARR。频繁的改分频系数不好,改计数器的值就可以。

我们用HAL库帮我们写好的库函数就行。

__HAL_TIM_SET_AUTORELOAD(&htim1,arr);

这个函数见名知意,直接改变重装载的值,当然,最后的原理肯定是直接改寄存器,官方已经帮我们封装好了,我直接用就行。传两个参数,一个定时器几,一个是自动重装载值。

stm32CUbeMX 电子琴代码 stm32电子琴原理图_经验分享_05

诸如此类的函数还有

stm32CUbeMX 电子琴代码 stm32电子琴原理图_经验分享_06

stm32CUbeMX 电子琴代码 stm32电子琴原理图_经验分享_07

stm32CUbeMX 电子琴代码 stm32电子琴原理图_stm32cubeMX_08

设置占空比的。

stm32CUbeMX 电子琴代码 stm32电子琴原理图_经验分享_09

设置计数值的。这个在输入捕获用的比较多。

stm32CUbeMX 电子琴代码 stm32电子琴原理图_经验分享_10

四、STM32cubeMX配置

前面讲了这么多,RCC,SYS,时钟树,应该要轻车熟路了。 固定的一个配置。上面三个就不讲了。上面三个可以去看前面如何配置。 我们讲我们的关键部分,。

4.1配置GPIO

首先把我们的PC0——PC7,配置成输入模式。上拉输入。

因为我们的按键是我们的外部输入,我们需要去检测引脚状态。

然后起一个名字。

stm32CUbeMX 电子琴代码 stm32电子琴原理图_经验分享_11

stm32CUbeMX 电子琴代码 stm32电子琴原理图_经验分享_12

其他7个也是一样的道理。

4.2配置定时器

实验明确指出是定时器1.通道2,我们刚开始就初始化为1kHz,占空比20%

他本来的GPIO 是PB0,根据实验要求我们需要重映射到PB14

stm32CUbeMX 电子琴代码 stm32电子琴原理图_嵌入式_13

stm32CUbeMX 电子琴代码 stm32电子琴原理图_stm32_14

stm32CUbeMX 电子琴代码 stm32电子琴原理图_经验分享_15

那么到这里我们就配置完了。我们生成工程。看需求,我们就需要定时器输出PWM波,和IO口。

五、软件部分

软件部分我们就一直检测这八个引脚哪个状态发生了变化,我们就执行哪一个操作。

我们就写一个简单易懂的就行

首先在main.h头文件中定义,读取我们的引脚状态

stm32CUbeMX 电子琴代码 stm32电子琴原理图_嵌入式_16

然后在main.c文件中,定义按键扫描函数和修改装载值的函数。

那么这几个数字怎么来的,举个例子。168M的主频,分频系数是168,那么就变成1MHz了,然后1M再除以3816->1000000/3816=262,是不是就是我们DO的音调了。以此类推。

stm32CUbeMX 电子琴代码 stm32电子琴原理图_stm32_17

stm32CUbeMX 电子琴代码 stm32电子琴原理图_经验分享_18

最后在我们的主函数里面调用我们的Playmusic 函数就可以了。注意,定时器的开启函数一定要加上 HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_2);。具体看我下面的代码。

/* USER CODE BEGIN 0 */ uint8_t KeyScan(void) { if(KEY_0==0||KEY_1==0||KEY_2==0||KEY_3==0||KEY_4==0||KEY_5==0||KEY_6==0||KEY_7==0) { HAL_Delay(20); if(KEY_0==0) return KEY_0_PRES; else if(KEY_1==0) return KEY_1_PRES; else if(KEY_2==0) return KEY_2_PRES; else if(KEY_3==0) return KEY_3_PRES; else if(KEY_4==0) return KEY_4_PRES; else if(KEY_5==0) return KEY_5_PRES; else if(KEY_6==0) return KEY_6_PRES; else if(KEY_7==0) return KEY_7_PRES; }else if(KEY_0==1||KEY_1==1||KEY_2==1||KEY_3==1||KEY_4==1||KEY_5==1||KEY_6==1||KEY_7==1) return 8; return 9; } void PlayMusic(void) { switch(KeyScan()) { case KEY_0_PRES:arr=3816;__HAL_TIM_SET_AUTORELOAD(&htim1,arr);break; case KEY_1_PRES:arr=3401;__HAL_TIM_SET_AUTORELOAD(&htim1,arr);break; case KEY_2_PRES:arr=3030;__HAL_TIM_SET_AUTORELOAD(&htim1,arr);break; case KEY_3_PRES:arr=2865;__HAL_TIM_SET_AUTORELOAD(&htim1,arr);break; case KEY_4_PRES:arr=2551;__HAL_TIM_SET_AUTORELOAD(&htim1,arr);break; case KEY_5_PRES:arr=2272;__HAL_TIM_SET_AUTORELOAD(&htim1,arr);break; case KEY_6_PRES:arr=2032;__HAL_TIM_SET_AUTORELOAD(&htim1,arr);break; case KEY_7_PRES:arr=1912;__HAL_TIM_SET_AUTORELOAD(&htim1,arr);break; default : arr=0;__HAL_TIM_SET_AUTORELOAD(&htim1,arr);break; } } /* USER CODE END 0 */int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM1_Init(); /* USER CODE BEGIN 2 */ HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_2); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ PlayMusic(); } /* USER CODE END 3 */ }总结

今天的总结就到这里,希望能够帮助到大家。

stm32CUbeMX 电子琴代码 stm32电子琴原理图_经验分享_19



【本文地址】


今日新闻


推荐新闻


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