• 树莓派进阶之路 (029)


      近几天听朋友有说到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--]='';
    36     }
    37     return 0;
    38 }
    39 
    40 //打印调试
    41 int printf_serial_dates(struct serial_port *serial){
    42     int i = 0;
    43     if('
    ' == serial->temp){
    44         for(i = 0;i<=serial->len;i++){
    45             printf(" %d---%x",i,serial->dates[i]);
    46         }
    47     }
    48     return 0;
    49 }
    50 
    51 //读取完成清空缓存0
    52 int clean_serial(struct serial_port *serial){
    53     if('
    ' == serial->temp){        
    54         clean_serial_port(serial);
    55     }
    56     return 0;
    57 }
    58 
    59 
    60 int main(void){
    61     struct serial_port serial;
    62     wiringPi(0,0);                                      //wiringPi初始化
    63     serial.fd = init_serial_port("/dev/ttyUSB0",9600);    //通过树莓派函数打开
    64     while(1){
    65         serial.temp = Serial_data_read_char_10(serial.fd);
    66         printf("%x	",serial.temp);
    67         if(((0xff > serial.temp)&&(0x80 < serial.temp))||(serial.temp == '
    ')||(serial.temp == '
    ')){
    68             serial.dates[serial.len++] = serial.temp;
    69             set_serial_dates_end(&serial);        //尾部加0
    70             //printf_serial_dates(&serial);        //打印
    71         
    72         clean_serial(&serial);                    //读取完成清空缓存0
    73         }
    74         else{                                    //出错清空缓存
    75         clean_serial_port(&serial);
    76         }
    77     }
    78     return 0;
    79 }
  • 相关阅读:
    深拷贝浅拷贝的探索以及实现
    Vue之动态class写法总结
    hh
    90%的新媒体人都在用的标题套路!
    研究999篇100W+爆款文,标题之总结
    想突破10w+?先过了这一关……
    易撰数据分析,做精准爆文分析!
    清除.bat
    截图.bat
    Git 学习笔记(二)分支管理
  • 原文地址:https://www.cnblogs.com/jikexianfeng/p/7593540.html
Copyright © 2020-2023  润新知