ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第三篇 树莓派的串口通信和语音识别模块

2022-01-12 18:05:23  阅读:264  来源: 互联网

标签:ASR 树莓 第三篇 int LD fd 串口 识别


目录

一、串口(UART)

二、 wiringPi提供的串口API

三、语音识别模块

1、阅读模块代码 

①代码阅读工具:Souces Insight4.0安装、激活、汉化等

②语音识别(口令模式)源码框架(按main.c的顺序阅读)

2、修改代码


一、串口(UART)

全双工: 通信允许数据在两个方向上同时地双向传输。

半双工:数据传输指数据可以在两个方向上传输,但不同时。

(串口通信属于全双工通信)

  • 树莓派的串口

        ①主串口(/dev/serial0):可以通过引脚实现通信

        ②辅助串口(/dev/serial1):不能使用GPIO通信(默认分配给蓝牙)

                (默认mini是禁用状态,无论指定为主uart还是辅助uart)

树莓派3/4B的外设包括两个串口 :

        ①串口设备(/dev/ttyAMA0):由硬件实现,有单独的波特率时钟源,性能高且可靠。

        ②mini串口设备(/dev/ttyS0):性能较低,功能简单

                                                         (官网提供图片)

二、 wiringPi提供的串口API

函数原型参数或功能解释返回值
int serialOpen (char *device ,int baud)

device:串口设备文件

  (/dev/ttyAMA0)

baud:波特率

成功:返回所打开的文件描述符fd;

失败:返回-1

void serialClose (int fd)fd:文件描述符无返回值
void serialPutchar (int fd, unsigned char c)发送一个字符到串口无返回值
void serialPuts (int fd, char *s)

发送字符串到串口

(字符串s要以' \0 '结束)

无返回值

int  serialDataAvail (int fd)获取串口中可读数据的字节数

成功:串口中可以读取的字节数;

失败:返回-1

int serialGetchar (int fd)

读取串口的数据

(读取之前判断是否有数据)

返回值:实际读取到的字节数

另外,Linux下的标准I/O函数也可使用(需包含头文件 inlcude<unistd.h>)

size_t write (int fd,const void * buf,size_t count)

size_t read(int fd,void * buf ,size_t count)


三、语音识别模块

1、阅读模块代码 

①代码阅读工具:Souces Insight4.0安装、激活、汉化

提取码:48a3(含安装、激活、汉化教程)

语音识别(口令模式)源码框架(按main.c的顺序阅读)

a.基本的初始化

Led_test( ) ;  //单片机指示灯闪烁3次

MCU_init( );  //初始化单片机I/O口特殊功能寄存器p0~p4,置为高电平;

                       //设置LD_MOOE为低电平,并行模式读写;

                       //打开中断控制寄存器。

LD_Reset( );//复位LD模块

UartIni(); //串口初始化

 接着赋值表示ASR状态的变量nAsrStatus=LD_ASR_NONE;

此时没有在做ASR识别。 

b.实现主要功能的代码

switch(nAsrStatue)执行各分支语句:

①case LD_ASR_RUNING:

    case LD_ASR_ERROR:     

        break;

(正在识别和识别错误时,不作处理)

②case LD_ASR_NONE:(表示ASR空闲中)

执行:将ASR状态赋值为running;再启动识别,调用runASR( )

runASR( )的主要功能:初始化ASR,添加关键词,启动ASR运算,内部大致包括:LD_AsrStart( )、LD_AsrAddFixed( )、LD_AsrRun( )、LD_GetResult( )。(初始化、添加关键词、启动运行、获取识别结果。LDChip.c中),ASR启动成功后,asrflag=1,等待LD3320的中断信号

③case LD_ASR_FOUNDOK:(表示识别完成)

执行:调用LD_GetResult( )获取识别结果,对获取的结果根据用户需要实现对应功能User_handle( ),处理完后再将ASR的状态置为LD_ASR_NONE(空闲状态)

④case LD_ASR_FOUNDZERO:(表示没有识别出结果)

执行:将ASR的状态置为LD_ASR_NONE

2、修改代码

阅读完模块代码,了解其基本架构后,即可根据需求进行修改。

示例:通过语音识别开、关灯

(由于我的树莓派凉了,此处略)

标签:ASR,树莓,第三篇,int,LD,fd,串口,识别
来源: https://blog.csdn.net/weixin_54429787/article/details/122456069

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有