asrpro2.0天问语音模块搭配STM32(STM32F103c8t6)-杨桃电子开发板
这里写自定义目录标题
- asrpro2.0天问语音模块搭配STM32(STM32F103c8t6)-杨桃电子开发板
- 第一步:修改杨桃电子一号板的电路
- 好!!!!以上这就是硬件连接部分了
asrpro2.0天问语音模块搭配STM32(STM32F103c8t6)-杨桃电子开发板
你好! 这是 asrpro2.0天问语音模块搭配STM32(STM32F103c8t6)-杨桃电子开发板手把手
第一步:修改杨桃电子一号板的电路
就是按照杨桃电子连接仿真器JTAG那个视频里面的开发板的模样把跳线帽全部拆了,不要连接
可以去B战看视频
如何你没有这个板子只有一个stm32f103c8t6的话那就更棒了
直接用杜邦线直接连接
用PB5和PB6直接和电脑通信
目的是干什么呢:看看这个模块是否正常
- 接下来就是单片机和电脑的串口通信了
- 这个杨桃电子开发板已经提供好了,估计买最小系统板的时候也应该有实例历程,测测板子的串口通信是正常
- 如果两个都OK,那就很好办了
接下来就是硬件接线了
语音模块GND 杜邦线连接单片机GND
语音模块PB5连接单片机PB11
语音模块PB6连接单片机PB10
好!!!!以上这就是硬件连接部分了
接下来应该就是代码了
接下来就是杨桃电子提供的代码了
作为参考
/*********************************************************************************************
模板制作: 杜洋工作室/洋桃电子
程序名: USART串口控制程序
编写人: 杜洋
编写时间: 2018年1月12日
硬件支持: STM32F103C8 外部晶振8MHz RCC函数设置主频72MHz 修改日志:
1- 说明:# 本模板加载了STM32F103内部的RCC时钟设置,并加入了利用滴答定时器的延时函数。# 可根据自己的需要增加或删减。*********************************************************************************************/
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "buzzer.h"
#include "usart.h"extern u8 Res; //这是新增加的int main (void){//主程序u8 a;//初始化程序RCC_Configuration(); //时钟设置LED_Init();//LED初始化KEY_Init();//按键初始化BUZZER_Init();//蜂鸣器初始化USART1_Init(9600); //串口初始化(参数是波特率)USART3_Init(9600); //串口初始化(参数是波特率)//主循环while(1){//查询方式接收if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE) != RESET){ //查询串口待处理标志位a =USART_ReceiveData(USART1);//读取接收到的数据switch (a){case '0':GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED控制printf("%c:LED1 OFF ",a); //break;case '1':GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED控制printf("%c:LED1 ON ",a); //break;case '2':BUZZER_BEEP1(); //蜂鸣一声printf("%c:BUZZER ",a); //把收到的数据发送回电脑break;default:break;} }switch(Res) //这也是自己加的{case '0':GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED控制printf("%c:LED1 OFF ",a); //break;case '1':GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED控制printf("%c:LED1 ON ",a); //break;case '2':BUZZER_BEEP1(); //蜂鸣一声printf("%c:BUZZER ",a); //把收到的数据发送回电脑break;default:break;}//按键控制if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平delay_ms(20); //延时20ms去抖动if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开 printf("KEY1 "); //}} if(!GPIO_ReadInputDataBit(KEYPORT,KEY2)){ //读按键接口的电平delay_ms(20); //延时20ms去抖动if(!GPIO_ReadInputDataBit(KEYPORT,KEY2)){ //读按键接口的电平while(!GPIO_ReadInputDataBit(KEYPORT,KEY2)); //等待按键松开 printf("KEY2 "); //}} // delay_ms(1000); //延时}
}/********************************************************************************************** 杜洋工作室 www.DoYoung.net* 洋桃电子 www.DoYoung.net/YT
*********************************************************************************************/
/*【变量定义】
u32 a; //定义32位无符号变量a
u16 a; //定义16位无符号变量a
u8 a; //定义8位无符号变量a
vu32 a; //定义易变的32位无符号变量a
vu16 a; //定义易变的 16位无符号变量a
vu8 a; //定义易变的 8位无符号变量a
uc32 a; //定义只读的32位无符号变量a
uc16 a; //定义只读 的16位无符号变量a
uc8 a; //定义只读 的8位无符号变量a#define ONE 1 //宏定义delay_us(1); //延时1微秒
delay_ms(1); //延时1毫秒
delay_s(1); //延时1秒*/
然后就是usart.h
//不使用某个串口时要禁止此串口,以减少编译量
#define EN_USART1 1 //使能(1)/禁止(0)串口1
#define EN_USART2 0 //使能(1)/禁止(0)串口2
#define EN_USART3 1 //使能(1)/禁止(0)串口3
这里使用了串口1和串口3
//串口3中断服务程序(固定的函数名不能修改)
void USART3_IRQHandler(void){ Res = USART_ReceiveData(USART3);
}
大概思路就是串口3利用中断获得模块的返回值也就是字符串 1 和 0,
在主函数中对res进行判断是关灯还是开灯
串口一就还是那个历程完成串口控制功能
大概就是这样,感谢你能看到这里
也是为了防止以后遗忘,偶尔可以回来翻翻