这里写自定义目录标题
asrpro2.0天问语音模块搭配STM32(STM32F103c8t6)-杨桃电子开发板
你好! 这是 asrpro2.0天问语音模块搭配STM32(STM32F103c8t6)-杨桃电子开发板手把手
第一步:修改杨桃电子一号板的电路
就是按照杨桃电子连接仿真器JTAG那个视频里面的开发板的模样把跳线帽全部拆了,不要连接
可以去B战看视频
如何你没有这个板子只有一个stm32f103c8t6的话那就更棒了
直接用杜邦线直接连接
用PB5和PB6直接和电脑通信
目的是干什么呢:看看这个模块是否正常
- 接下来就是单片机和电脑的串口通信了
- 这个杨桃电子开发板已经提供好了,估计买最小系统板的时候也应该有实例历程,测测板子的串口通信是正常
- 如果两个都OK,那就很好办了
接下来就是硬件接线了
语音模块GND 杜邦线连接单片机GND
语音模块PB5连接单片机PB11
语音模块PB6连接单片机PB10
好!!!!以上这就是硬件连接部分了
接下来应该就是代码了
接下来就是杨桃电子提供的代码了
作为参考
C
/*********************************************************************************************
模板制作: 杜洋工作室/洋桃电子
程序名: 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
C
//不使用某个串口时要禁止此串口,以减少编译量
#define EN_USART1 1 //使能(1)/禁止(0)串口1
#define EN_USART2 0 //使能(1)/禁止(0)串口2
#define EN_USART3 1 //使能(1)/禁止(0)串口3
这里使用了串口1和串口3
C
//串口3中断服务程序(固定的函数名不能修改)
void USART3_IRQHandler(void){
Res = USART_ReceiveData(USART3);
}
大概思路就是串口3利用中断获得模块的返回值也就是字符串 1 和 0,
在主函数中对res进行判断是关灯还是开灯
串口一就还是那个历程完成串口控制功能
大概就是这样,感谢你能看到这里
也是为了防止以后遗忘,偶尔可以回来翻翻