su-03t离线语音模块与stm32单片机通信方法

手把手教程,基础薄弱的也能看懂!

由于关于此模块连接stm32的教程较少,避免自己忘记特此记录一下。

1.搜索智能公元并进行登录

2.选择产品管理中的所有产品并创建一个产品

3.产品类别选择其他--其他产品

4.场景选择纯离线方案

5.模组选择su-03t,当然你也可以选择你购买的相应模块

6.产品名称随便填,语音选择中文,当然你也可以选择英文

7.以下按照我的图片进行设置,稳定降噪如果你的产品会发出稳定噪音时可以选择,这里不选

8.pin脚这里使用B6和B7脚,把它改成RX和TX进行通信,配置如图,只需配置这两个脚即可,如需其他功能可另行配置

9.设置唤醒词和回复词,也就是你想通过什么词来唤醒设备,你可设置多条,灵敏度选择中一般就够用

10.接下来是最关键的一步,通过命令词发送指定内容,单片机接收到相应内容后做对应操作,比如开关灯。如果你需要让语音模块读报温度,触发方式改成串口输入

11.切换到控制详情,添加一个控制,控制详情如图,主要流程就是当你喊出某个关键词时,语音模块会发送相应内容,这里发送的是02

12.这里只演示了一个,其他你可以如法炮制,只需要发送不同内容即可,注意发送规则,接下来处理播报温湿度的方法,播报温度需要一个发送一个接收来配合,比如喊出播报温度时会朝单片机发送一个数字,单片机接收到就把温度发送过来,然后进行播报,这里只演示接收的方法,发送按照前面所示。首先添加一个触发,参数名和类型按所需操作

13.接下来再添加一个控制,这里TEMP就是接收单片机传过来的值,这个是你上一步自己定义的参数名

最后完成需要两个相配合,这里截图仅供参考

14.这步可跳过,简而言之就是无需唤醒就可进行操作,按所需设置

15.这步选择自己喜欢的

16.这步设置的是上电播报提醒,可以不用设置,剩下的主动退出回复和个性化音频按需设置,没有特殊要求无需设置,

17.接着发布版本

18.等待生成,一般需要10-30分钟,生成好之后下载固件,至此智能公元平台相应配置设置完成

19.接下来进行烧写,这里使用的是USB转TTL模块,接线如下所示

语音模块usb转ttl模块
B6TXD
B7RXD
GNDGND
5V5V

 20.打开烧写软件

21.选择下载好的固件

22.接着先拔掉5v线,点击烧录后再把5v线接上,等待烧录完成,至此语音模块就已经配置好了

23.与stm32连接只需要通过串口进行通信,写出相应的发送和接收函数,在main.c中当接收到相应数字执行某个判断,发送也是一样的,

### SU03TSTM32通过UART通信的配置 为了实现SU03T模块STM32微控制器之间的串口通信,可以通过STM32 HAL库完成初始化和数据传输功能。以下是详细的说明以及示例代码。 #### 配置步骤概述 在使用HAL库时,需注意具体的错误码可能随STM32系列、型号及HAL库版本变化而有所不同[^1]。因此,在实际开发过程中应查阅相关参考手册以确认具体参数设置。此外,UART错误处理可通过`huart->ErrorCode`变量检测特定类型的错误,例如帧错误或奇偶校验错误等[^2]。 对于DMA模式下的UART缓冲区管理,可定义发送和接收缓冲区大小并利用FIFO队列机制优化性能[^3]。同时,UART作为常见的异步通信接口之一,其基本原理是在嵌入式系统调试中广泛应用,尤其是在向PC端打印日志信息时非常有用[^4]。 --- #### 初始化配置 以下是一个典型的UART外设初始化过程: ```c #include "stm32f4xx_hal.h" // 定义全局变量用于存储接收到的数据 uint8_t RxBuffer[64]; UART_HandleTypeDef huart1; void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 9600; // 设置波特率为9600bps huart1.Init.WordLength = UART_WORDLENGTH_8B; // 数据长度为8位 huart1.Init.StopBits = UART_STOPBITS_1; // 停止位数为1 huart1.Init.Parity = UART_PARITY_NONE; // 不启用奇偶校验 huart1.Init.Mode = UART_MODE_TX_RX; // 启用收发模式 huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 关闭硬件流控制 huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { // 调用HAL库函数进行初始化 Error_Handler(); // 如果失败则调用错误处理器 } } ``` 上述代码片段展示了如何基于HAL库初始化USART1外设,并设置了常用的通信参数如波特率、字长、停止位等。 --- #### 发送数据至SU03T模块 当需要向SU03T设备发送命令字符串或其他形式的消息时,可以采用如下方法: ```c void SendDataToSU03T(const char *data, uint16_t length) { if (HAL_UART_Transmit(&huart1, (uint8_t *)data, length, HAL_MAX_DELAY) != HAL_OK){ Error_Handler(); } } // 使用实例 SendDataToSU03T("AT+CMD\r\n", strlen("AT+CMD\r\n")); ``` 此部分实现了简单的消息传递逻辑,其中包含了超时保护策略以防阻塞操作过久未响应的情况发生。 --- #### 接收来自SU03T的数据 针对从外部传感器或者其它装置读取反馈信号的需求,则要构建对应的监听循环结构: ```c void ReceiveDataFromSU03T(uint8_t* buffer, uint16_t size) { if(HAL_UART_Receive_IT(&huart1, buffer, size)!= HAL_OK){ Error_Handler(); } } // 中断回调函数模板 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART1){ ProcessReceivedData(RxBuffer); // 自定义解析函数 HAL_UART_Receive_IT(&huart1, RxBuffer, sizeof(RxBuffer)); // 继续等待新数据到来 } } ``` 这里采用了中断驱动的方式提高实时性和效率,每当有新的字符到达指定寄存器位置之后便会触发相应事件通知应用程序层进一步处理这些输入资料。 --- ### 注意事项 - **波特率匹配**:确保双方都工作在同一速率下以免造成误解码现象。 - **奇偶校验选项**:如果启用了此项特性记得同步调整目标节点上的对应属性值。 - **流量控制协议**:除非必要否则一般推荐禁用RTS/CTS之类额外握手线路连接减少布线复杂度的同时简化固件设计流程。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值