zoukankan      html  css  js  c++  java
  • 基于UP-CUP6410点灯实验完成

                                               远程点灯实验

    实验目的:

                实现远程点灯,通过gprs 自带调试软件发送信息,完成智能家具远程点灯实验。

    1.定制arm系统

             使用uboot资料自带的!在内核中添加pl2303串口驱动,进行u口转串口的使用,因为我使用的arm板子,串口不够用,还需要一个串口来支持下面的430单片机,通过430去控制家具的灯。

        上操作:

              内核修改:

                      到linux内核目录下 make menucofig

                                            Device Drivers-->USB support-->USB Serial Converter support--->【*】USB CP2101 UART Bridge Controller

                      然后退出保存!

                       make clean

                       make 完成!

             制作文件系统,设置开机自启动程序

                    修改/etc/profile文件,加运行我程序的命令(./start)

                    将交叉编译好的程序,放到指定的文件夹下,开机自启动就好。

       上网关的代码:

    #include<stdio.h>
    #include<string.h>
    #include<sys/types.h>
    #include<errno.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    #include<unistd.h>
    #include<termios.h>
    #include<stdlib.h>

    int set_opt(int fd,int nSpeed,int nBits,char nEvent,int nStop)
    {
    struct termios newtio,oldtio;
    if(tcgetattr(fd,&oldtio) != 0)
    {
    perror("SetupSerial 1");
    return -1;
    }
    bzero(&newtio,sizeof(newtio));//清空newtio中相应位
    newtio.c_cflag |= CLOCAL | CREAD;
    newtio.c_cflag &= ~CSIZE;

    switch(nBits)
    {
    case 7:
    newtio.c_cflag |= CS7;
    break;
    case 8:
    newtio.c_cflag |= CS8;
    break;
    }
    switch(nEvent)
    {
    case 'O':
    newtio.c_cflag |= PARENB;
    newtio.c_cflag |= PARODD;
    newtio.c_iflag |=(INPCK |ISTRIP);
    case 'E':
    newtio.c_iflag |= (INPCK | ISTRIP);
    newtio.c_cflag |= PARENB;
    newtio.c_cflag |= ~PARODD;
    newtio.c_cflag &= ~PARENB;
    break; }
    switch(nSpeed)
    {
    case 2400:
    cfsetispeed(&newtio,B2400);
    cfsetospeed(&newtio,B2400);
    break;
    case 4800:
    cfsetispeed(&newtio,B4800);
    cfsetospeed(&newtio,B4800);
    break;
    case 9600:
    cfsetispeed(&newtio,B9600);
    cfsetospeed(&newtio,B9600);
    break;
    case 115200:
    cfsetispeed(&newtio,B115200);
    cfsetospeed(&newtio,B115200);
    break;

    default:
    cfsetispeed(&newtio,B9600);
    cfsetospeed(&newtio,B9600);
    break;
    }
    if(nStop ==1)
    newtio.c_cflag &= ~CSTOPB;
    else if(nStop ==2)
    newtio.c_cflag |= CSTOPB;
    newtio.c_cc[VTIME] = 0;
    newtio.c_cc[VMIN] = 0;
    tcflush(fd,TCIFLUSH);
    if((tcsetattr(fd,TCSANOW,&newtio))!=0)
    {
    perror("com set error");
    return (-1);
    }
    printf("set done! ");
    return 0;
    }

    int Open_port(int fd,int comport)
    {
    char *dev[]={"/dev/ttyUSB0","/dev/ttySAC1","/dev/ttySAC2","/dev/ttySAC3"};
    long vdisable;
    if(comport==1)
    {
    fd = open("/dev/ttyUSB0",O_RDWR);
    if(-1==fd)
    {
    perror("Can't Open Serial Port");
    return (-1);
    }
    else
    printf("Open ttySAC0 >>>>>.. ");
    }
    else if(comport==2)
    {
    fd = open("/dev/ttySAC1",O_RDWR|O_NOCTTY|O_NDELAY);

    if(-1 == fd)
    {
    perror("Can't Open Serial Port");
    return (-1);
    }
    else
    printf("Open ttySAC1klldkkfjkasdjfakl ");
    }
    else if(comport==3)
    {
    fd = open("/dev/ttySAC2",O_RDWR|O_NOCTTY|O_NDELAY);
    if(-1 == fd)
    {
    perror("Can't Open Serial Port");
    return (-1);
    }
    else
    printf("Open ttySAC2 .............. ");
    }
    else if(comport == 4)
    {
    fd = open("/dev/ttySAC3",O_RDWR | O_NOCTTY|O_NDELAY);
    if(fd == -1)
    {
    perror("Can't Open serial Port");
    return (-1);
    }
    else
    printf("Open ttySAC3....................... ");
    }
    if(fcntl(fd,F_SETFL,0)<0)
    printf("fcntl falled ! ");
    else
    printf("fcntl =%d ",fcntl(fd,F_SETFL,0));
    if(isatty(STDIN_FILENO)==0)
    printf("standard input is not a terminal device ");
    else
    printf("isatty success! ");
    printf("fd-open=%d ",fd);
    return fd;
    }



    int main(void)
    {
    int fd,fd1;
    int nread,i,nwrite;
    char buff[1];
    if((fd=Open_port(fd,1))<0)
    {
    perror("open_port error");
    return ;
    }
    if((i=set_opt(fd,9600,8,'N',1))<0)
    {
    perror("set_opt error");
    return ;
    }
    if((fd1=Open_port(fd1,2))<0)
    {
    perror("open_port ttySAC2 error");
    return ;
    }
    if((i=set_opt(fd1,9600,8,'N',1))<0)
    {
    perror("ser_opt 2 error");
    return ;
    }
    sleep(3);
    printf("fd = %d ",fd);
    printf("fd1 = %d ",fd1);
    /* for(i=0;i<100;i++)
    {
    nread = write(fd,buff,8);
    printf("nread = %d,%s ",nread,buff);
    sleep(1);
    }*/
    while(1)
    {
    sleep(1);
    nread=read(fd1,buff,1);
    if(nread != 0)
    {
    nwrite = write(fd,buff,1);
    if(nwrite != nread)
    {
    perror("error!!!!!!!!!!!");
    return ;
    }
    }
    }
    close(fd);
    close(fd1);
    return ;
    }

    2.430 单片机通过uart接收信息,上代码

    #include <msp430x14x.h>

    char i;
    int main( void )
    {
    // Stop watchdog timer to prevent time out reset
    WDTCTL = WDTPW + WDTHOLD;
    P2DIR=0xff;
    P2OUT=0xff;//初始化端脚
    P3SEL |= 0x30;//引脚服用
    ME1 |= UTXE0 +URXE0;//使能
    UCTL0 |= CHAR;//8位数据
    UTCTL0 |= SSEL0;//选择晶振
    UBR00=0x03;
    UBR10 = 0x00;
    UMCTL0 = 0x4A;
    UCTL0 &= ~SWRST;
    IE1 |= URXIE0 + UTXIE0;
    IFG1 &= ~UTXIFG0;

    _BIS_SR(LPM3_bits + GIE);

    }
    #pragma vector = UART0RX_VECTOR
    __interrupt void usart0_rx(void)
    {
    i = RXBUF0;
    switch(i)
    {
    case '1':P2OUT ^= 0x01;break;
    case '2':P2OUT ^= 0x02;break;
    case '3':P2OUT ^= 0x04;break;
    case '4':P2OUT ^= 0x08;break;
    case '5':P2OUT ^= 0x10;break;
    case '6':P2OUT ^= 0x20;break;
    case '7':P2OUT ^= 0x40;break;
    case '8':P2OUT ^= 0x80;break;
    case '9':P2OUT |= 0xff;break;
    default:P2OUT |= 0xff;break;
    }
    }

    3.按照我写的GPRS的串口,设置gprs属性!

     通过所带资料调试,成功!

                   

                       

              

                       

                     

                                            

            

            

    The future's not set,there is no fate but what we make for ourselves.
  • 相关阅读:
    这4点微不足道的改变,正在带我起飞
    “挑三拣四”地学一学Java I/O
    做到这3点,你也能成为一个高情商的人
    深入浅出一下Java的HashMap
    前端学习 -- Css -- 有序列表和无序列表
    Python 文件I/O
    python 模块
    python 函数
    Python 日期和时间
    python 字典
  • 原文地址:https://www.cnblogs.com/wang1994/p/5093650.html
Copyright © 2011-2022 走看看