前言本实验基于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 9600 volatile uint8_t g_last 0; // 最近收到的字节 volatile uint16_t g_cnt 0; // 进中断次数 void LED_Init(void) { __SYSCTRL_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef g {0}; g.ITGPIO_IT_NONE; g.ModeGPIO_MODE_OUTPUT_PP; g.PinsGPIO_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.PinsGPIO_PIN_3; g.ModeGPIO_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.下达语音命令时要按照规定好的内容下达并且吐字尽量清晰。