近几天听朋友有说到LD3320 语音模块,刚好身边有块树莓派3,就在某宝上买了块自带mcu的LD3320 。
准备:
树莓派一个(配置了wiringPi开发环境的详情见本人博客:树莓派进阶之路 (006) - 树莓派安装wiringPi)
LD3320 语音模块一片:https://detail.tmall.com/item.htm?id=41365254224&spm=a1z09.2.0.0.a3beb5clzbCiw&_u=p2cc1o5d426a
TTL下载器 一块:买模块的时候老板送了一个。
win电脑:keil (查看51工程代码),WinSCP(树莓派文件挂载),Notepad++(代码编辑)
或 Ubuntu电脑:gedit(代码编辑),scp(远程文件传输),wine(win环境模拟器为了安装keil 查看51工程代码)
开始搞机:
因为有买的模块已经有现成的51 做 mcu控制芯片,树莓派要做的就是和51做通信交互,我选用的是店家送的TTL下载器通过调用系统USB串口设备进行通信。连线常规链接方式,TTL下载器插在USB接口上:在终端输入 "ls /dev/tty*"
我们可以看到显示有USB设备的,我们只要通过调用系统函数open打开设备描述符就行了。
代码如下(Picustom.h):
1 # include <stdio.h> 2 # include <assert.h> //测试函数 3 # include <string.h> 4 # include "Picustom.h" //自定义头文件 5 # define uint8 unsigned char //宏定义 6 # define N 124 7 8 struct serial_port{ 9 char device[32]; //设备路径 10 unsigned long baud; //波特率 11 int fd; //设备描述符 12 unsigned char dates[1024]; //文件转存 13 unsigned char temp; //字符缓存 14 int len; //长度 15 }; 16 17 //字符串cp函数 18 char * my_strcpy(char *dest, const char *src){ //将源字符串加const,表明其为输入参数,起到相应的保护作用 19 assert(src != NULL&&dest != NULL); //对源地址和目的地址加非0断言 20 char *ret = dest; 21 while ((*dest++ = *src++)); 22 return ret; //引用返回地址,方便链式操作!! 23 } 24 //清空serial 25 int clean_serial_port(struct serial_port *serial){ 26 memset(serial->dates,0,1024); 27 serial->len = 0; 28 printf(" "); 29 return 0; 30 } 31 //字段尾部加0 32 int set_serial_dates_end(struct serial_port *serial){ 33 if(' ' == serial->temp){ 34 printf(" "); 35 serial->dates[serial->len--]='