• 正文
  • 相关推荐
申请入驻 产业图谱

CW32L012的智能语音灯控实现案例分享

06/30 07:33
95
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

前言:本实验基于CW32L012主控,搭配AI语音CI-03T模块进行语音控制光开关的实验。

一、模块介绍

所需硬件:CW32L012主板,CI-03T AI大模型语音模块LED灯,电源

本实验实现逻辑:第一,通过在线配置语音模块通讯协议以及语音指令。第二,配置好单片机端串口通讯协议需与语音模块一致。第三,插上LED灯的两个引脚并在单片机端配置点亮熄灭逻辑。第四,上电说语音指令,语音模块发给单片机端并由单片机端点亮熄灭LED实现智能语音灯控。

下附智能公元的智能语音在线配置内容:

二、软件讲解:

下附单片机串口通讯程序:

#include "cw32l012.h"#include "cw32l012_sysctrl.h"#include "cw32l012_gpio.h"#include "cw32l012_uart.h"#include "OLED.h"#include <stdio.h>#define SYS_CLK_HZ   4000000UL#define VOICE_BAUD   9600volatile uint8_t  g_last = 0;     // 最近收到的字节volatile uint16_t g_cnt  = 0;     // 进中断次数void LED_Init(void){    __SYSCTRL_GPIOA_CLK_ENABLE();    GPIO_InitTypeDef g = {0};    g.IT=GPIO_IT_NONE; g.Mode=GPIO_MODE_OUTPUT_PP; g.Pins=GPIO_PIN_6;    GPIO_Init(CW_GPIOA, &g);    PA06_SETLOW();}void UART_Init_Voice(void){    __SYSCTRL_GPIOA_CLK_ENABLE();    __SYSCTRL_UART1_CLK_ENABLE();    GPIO_InitTypeDef g = {0};    g.Pins=GPIO_PIN_3; g.Mode=GPIO_MODE_INPUT;    GPIO_Init(CW_GPIOA, &g);    PA03_AFx_UART1RXD();    UART_InitTypeDef u = {0};    u.UART_BaudRate = VOICE_BAUD;    u.UART_Source   = UART_Source_PCLK;    u.UART_UclkFreq = SYS_CLK_HZ;    u.UART_Mode     = UART_Mode_Rx;    UART_Init(CW_UART1, &u);    UART_ITConfig(CW_UART1, UART_IT_RC, ENABLE);    UART_ClearITPendingBit(CW_UART1, UART_IT_RC);    NVIC_SetPriority(UART1_IRQn, 0);    NVIC_EnableIRQ(UART1_IRQn);}int main(void){    SystemInit();    __enable_irq();    LED_Init();    OLED_Init();    OLED_Clear();    UART_Init_Voice();    while (1)    {        OLED_Printf(0, 0,  OLED_6X8, "RX = %02X    ", g_last);        OLED_Printf(0, 16, OLED_6X8, "CNT= %d     ", g_cnt);        OLED_Update();    }}/* ★函数名与启动文件一致:UART1_IRQHandler */void UART1_IRQHandler(void){    if (UART_GetITStatus(CW_UART1, UART_IT_RC) != RESET)    {        UART_ClearITPendingBit(CW_UART1, UART_IT_RC);        g_last = UART_ReceiveData(CW_UART1);        g_cnt++;        if (g_last == 0x01) PA06_SETHIGH();        if (g_last == 0x02) PA06_SETLOW();    }}void assert_failed(uint8_t *file, uint32_t line) { while(1); }

三、总结与建议:

1.AI语音端和单片机端需要对好通讯协议保证收发一致,以及波特率也要保持一致。

2.LED灯的引脚需要正确插在单片机的引脚上,否则会不亮。

3.下达语音命令时要按照规定好的内容下达并且吐字尽量清晰。

扫码加入QQ群3群| 610403240

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

以开放、共享、互助为理念,致力于构建武汉芯源半导体CW32系列MCU生态社区。无论是嵌入式MCU小自还是想要攻破技术难题的工程师,亦或是需求解决方案的产品经理都可在CW32生态社区汲取营养、共同成长。