目录
①代码阅读工具:Souces Insight4.0安装、激活、汉化等
一、串口(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、修改代码
阅读完模块代码,了解其基本架构后,即可根据需求进行修改。
示例:通过语音识别开、关灯
(由于我的树莓派凉了,此处略)