【10天基于STM32F401RET6智能锁项目实战第4天】外部中断的按键实现语音控制

一、实现语音功能

1、语音模块的资料

首先我们要做的就是了解语音模块是怎么使用的,那么就要找到语音模块的数据手册,找到了下面就看一下语音模块的参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、代码实现

STM32F401RET6与语音模块的的接口
在这里插入图片描述
看完上面的材料我们就可以按照语音模块的数据手册和STM32F401RET6与语音模块的原理图来完成我们的代码

下面就写我们的代码,具体的工程是怎么建立的,这里就不说了,不会的可以回去前面看一下,我们就直接上代码
voice.c代码

#include "voice.h"
#include "delay.h"


void Voice_Config(void)
{	
	GPIO_InitTypeDef GPIO_InitStruct;//声明结构体变量
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//打开GPIOC的时钟
	//初始化PB8和PB9
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//通用输出
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;//第5号管脚
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉
	GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;//速度50Mhz
	GPIO_Init(GPIOC, &GPIO_InitStruct);
	
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;//通用输入
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;//第4号管脚
	
	GPIO_Init(GPIOC, &GPIO_InitStruct);
	
	
}

void Data_H(void)
{
	
	Voice_Data_H;
	Delay_us(1500);
	Voice_Data_L;
	Delay_us(500);
}

void Data_L(void)
{
	Voice_Data_H;
	Delay_us(500);
	Voice_Data_L;
	Delay_us(1500);
}

void Voice_SendData(u8 data)
{
	u8 i;
	Voice_Data_H;
	Delay_ms(8);
	Voice_Data_L;
	Delay_ms(1);
	
	for(i = 0;i < 8;i++)
	{
		if(data & (0x80 >> i))
		{
			Data_H();
		}
		else
		{
			Data_L();
		}
	}
	
	
	
}



voice.h代码,里面包含了一个位带操作的头文件和延时的头文件

#ifndef _VOICE_H
#define _VOICE_H


#include "stm32f4xx.h"
#include "delay.h"
#include "io_bit.h"


#define Voice_Data_H PCout(5) = 1
#define Voice_Data_L PCout(5) = 0

#define Voice_BUSY PCin(4) 



void Voice_Config(void);
void Voice_SendData(u8 data);


#endif

main.h也要包含voice.h

#ifndef _MAIN_H
#define _MAIN_H

#include "stm32f4xx.h"
#include "stdio.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include "voice.h"
#include "systick.h"
#include "exit.h"





#endif

main.c的代码

#include "main.h"
int main()
{
	Voice_Config();
	

	Delay_ms(500);
	Voice_SendData(0x18);
	Delay_ms(100);
	while(Voice_BUSY);	
	while(1);
		
}

这样就可以让语音模块响起来了,下面就来用外部中断用按键来实现语音控制

二、外部中断的按键实现语音控制

语音模块的代码还是保持不变,我们再加上外部中断的代码和改一下主程序的代码
exit.h代码

#ifndef _EXIT_H
#define _EXIT_H

#include "stm32f4xx.h"

void Exit_Config(void);




#endif

exit.c代码

#include "exit.h"
#include "voice.h"
#include "led.h"
void Exit_Config(void)
{
	
	EXTI_InitTypeDef exit_InitTypeDef;
	NVIC_InitTypeDef nvic_InitTypeDef;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource13);
	
	exit_InitTypeDef.EXTI_Line = EXTI_Line13;
	exit_InitTypeDef.EXTI_Trigger = EXTI_Trigger_Falling;
	exit_InitTypeDef.EXTI_Mode = EXTI_Mode_Interrupt;
	exit_InitTypeDef.EXTI_LineCmd = ENABLE;
	EXTI_Init(&exit_InitTypeDef);
	
	nvic_InitTypeDef.NVIC_IRQChannel=EXTI15_10_IRQn; 
	nvic_InitTypeDef.NVIC_IRQChannelCmd=ENABLE;
	nvic_InitTypeDef.NVIC_IRQChannelPreemptionPriority=2;
	nvic_InitTypeDef.NVIC_IRQChannelSubPriority=1;
	NVIC_Init(&nvic_InitTypeDef);
	
}


//外部中断
void EXTI15_10_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line13) != RESET)
	{
		LED1 = 0;  
		Delay_ms(500);
		Voice_SendData(0x18);
		Delay_ms(100);
		while(Voice_BUSY);
	}
	EXTI_ClearITPendingBit(EXTI_Line13);
}

main.h要包含voice.h和exit.h

#ifndef _MAIN_H
#define _MAIN_H

#include "stm32f4xx.h"
#include "stdio.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include "voice.h"
#include "systick.h"
#include "exit.h"





#endif

main.c代码

#include "main.h"



int main()
{
	Led_Config();//LED初始化
	Voice_Config();
	Exit_Config();
	Key_Init();//按键初始化
while(1)
{
}
		
}


这样我们用外部中断的按键实现语音控制就完成了
如果这篇博文对你有帮助赶紧关注、点赞、收藏吧,感谢你的支持!
后面还会有关于系统滴答定时器的相关实验,每天持续更新…

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是北豼不太皮吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值