stm32f103c8t6+su -o3tyy语音模块

记录一下,学习stm32,买了一个语音模块,然后,这个语音模块主要是su-03t其主要作用,虽然我买的这个板子的外壳叫做asr02。

先看个结果:

su03t语音模块

我一开始的想法就是通过语音模块传入指令,然后给是stm32去执行控制对应的外设,

串口的协议就是利用usart.

由于本人才开始学,所以不太熟悉操作,导致我直接把语音模块的rxd和txd的引脚(b6,b7)直接连接给了stm32对应的usart(a9,a10)引脚,然后给语音模块输入指令“开灯”,但是没有什么反应,测试了好久还是原地踏步,然后,还问了客服,客服也是叫我单独在测测看,可是我单独拿usb串口连接语音模块的b6.b7引脚还是不行,收不到消息。

当然,出错原因我还是知道了,是我太蠢了哈哈哈

  1. 语音模块板子出厂设置全部引脚都是设置为gpio口,所以再怎么也收不到数据
  2. 接线要对应,usb的串口助手的rxd和txd连接语音模块的rxd,txd都要交叉连接
  3. 语音模块要5v供电哦

解决办法

  1. 进入智能公元/AI产品零代码平台,这个网站设置你的语音模块想干参数,还有引脚设置,b6,b7设置为usart1
  2. 设置串口的参数,如01,02,03等等就可以收到给语音模块的指令后输出的数据
  3. 具体烧录办法网上or客服有就不介绍了。
  4. 最后就在keil5 函数里写中断函数的代码,

如,我打开灯就是01,关灯就是02....

代码如下:

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */

  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */
//	
	
	 // 接收到的指令数据
    uint8_t received_data = rx_buf[0];
	static int i=0;
    switch(received_data){
        case 0x01:
           HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);//开灯
            break;

		case 0x02:
              HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);//关灯
            break;
		case 0x03:
            
            break;
		case 0x04:
            
            break;
		
		case 0x05:
					i += 30;
					if (i > 180) {
						i = 0;  // 如果 i 超过 180 度,重置为 0
					}
					PWM_SetCompare(i); // 控制舵机的代码
					  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); // 确保 PWM 信号一直输出
					break;

	
            break;
		case 0x06:
			 PWM_SetCompare(0); // 控制舵机的示例代码
			break;
        default:
            // 错误或未识别的指令处理
            break;
    }
	
	
	
	
	HAL_UART_Receive_IT(&huart1,rx_buf,1);//打开uart的中断,每次开启了下次就不会开启,就得手动开启一次
	
	
	
  /* USER CODE END USART1_IRQn 1 */
}

差不多就是这样了。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值