2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 【10天基于STM32F401RET6智能锁项目实战第4天】外部中断的按键实现语音控制

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

时间:2021-01-03 14:35:16

相关推荐

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

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

一、实现语音功能1、语音模块的资料2、代码实现二、外部中断的按键实现语音控制

一、实现语音功能

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和PB9GPIO_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;//速度50MhzGPIO_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){}}

这样我们用外部中断的按键实现语音控制就完成了

如果这篇博文对你有帮助赶紧关注、点赞、收藏吧,感谢你的支持!

后面还会有关于系统滴答定时器的相关实验,每天持续更新…

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。