沁恒CH32V307VCT6与ASRPRO串口通信
2.asrpro专用烧录器或者普通的USB-TTL(开发板有手动下载,比较麻烦,我用的很难受)1.asrpro开发板+喇叭(或者asrpro基础版+麦克风+喇叭)上电后,语音会一直打开灯光关闭灯光重复话语,lcd灯也会一直打开关闭。3.ch32v307vct6评估板(核心板应该也可以)注意:这个是个大家参考的,不能运行的。
·
一、材料准备
1.asrpro开发板+喇叭(或者asrpro基础版+麦克风+喇叭)

2.asrpro专用烧录器或者普通的USB-TTL(开发板有手动下载,比较麻烦,我用的很难受)

3.ch32v307vct6评估板(核心板应该也可以)

4.接线
asrpro ch32v307vct6
GND GND
5v 5v
PA2 PA3
PA3 PA2
二、代码
1、ch32v307vct6端
uatr.c
#include "debug.h"
/* UART2初始化函数 */
void Usart2_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
// 配置PA2(TX)和PA3(RX)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
USART_Init(USART2, &USART_InitStructure);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_Cmd(USART2, ENABLE);
USART_ClearFlag(USART2,USART_FLAG_TC);//清空串口2的发送标志位
}
main.c
#include "debug.h"
#include "ch32v30x.h"
#include "uart.h"
void USART2_SendByte(uint8_t data) {
USART_SendData(USART2, data);
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); // 等待发送完成
}
void USART2_SendString(char *str) {
while (*str) {
USART_SendData(USART2, *str++);
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
}
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
SystemCoreClockUpdate();
Delay_Init();
USART_Printf_Init(115200);
Usart2_Init();
while(1)
{
USART2_SendString("OFF");
Delay_Ms(1500);
USART2_SendString("ON");
Delay_Ms(1500);
}
}
2、ASRPRO端
(1)图片格式

(2)C语言格式
注意:这个是个大家参考的,不能运行的
#include "asr.h"
extern "C"{ void * __dso_handle = 0 ;}
#include "setup.h"
#include "myLib/asr_event.h"
#include "HardwareSerial.h"
uint32_t snid;
String Rec;
void UART1_RX();
void ASR_CODE();
//{speak:小蝶-清新女声,vol:2,speed:10,platform:haohaodada}
//{playid:10001,voice:欢迎使用语音助手,用小心唤醒我。}
//{playid:10002,voice:}
void UART1_RX(){
while (1) {
if(Serial1.available() > 0){
Rec = Serial1.readString();
Serial1.print(Rec);
if(Rec == "ON"){
delay(200);
enter_wakeup(5000);
delay(200);
//{playid:10500,voice:关闭灯光}
play_audio(10500);
digitalWrite(4,1);
}
if(Rec == "OFF"){
delay(200);
enter_wakeup(5000);
delay(200);
//{playid:10501,voice:打开灯光}
play_audio(10501);
digitalWrite(4,0);
}
}
delay(2);
}
vTaskDelete(NULL);
}
/*描述该功能...
*/
void ASR_CODE(){
switch (snid) {
case 1:
digitalWrite(4,0);
break;
case 2:
digitalWrite(4,1);
break;
}
if((snid) == 3){
digitalWrite(4,0);
}
if((snid) == 4){
digitalWrite(4,1);
}
}
void hardware_init(){
setPinFun(2,FORTH_FUNCTION);
setPinFun(3,FORTH_FUNCTION);
Serial1.begin(115200);
Serial1.setTimeout(10);
Rec = "";
vol_set(1);
xTaskCreate(UART1_RX,"UART1_RX",128,NULL,4,NULL);
vTaskDelete(NULL);
}
void setup()
{
set_wakeup_forever();
//{ID:0,keyword:"唤醒词",ASR:"小心",ASRTO:"我在"}
//{ID:1,keyword:"命令词",ASR:"打开灯光",ASRTO:"好的,马上打开灯光"}
//{ID:2,keyword:"命令词",ASR:"关闭灯光",ASRTO:"好的,马上关闭灯光"}
//{ID:3,keyword:"命令词",ASR:"灯光打开",ASRTO:"好的,马上打开灯光"}
//{ID:4,keyword:"命令词",ASR:"灯光关闭",ASRTO:"好的,马上关闭灯光"}
setPinFun(4,FIRST_FUNCTION);
pinMode(4,output);
}
三、运行结果
上电后,语音会一直打开灯光关闭灯光重复话语,lcd灯也会一直打开关闭
希望以上能帮助到你,想要了解更多可以去论坛:ASRPRO学习资源汇总 - 天问开发者 - 好好搭搭论坛 - 好好搭搭在线
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)