基于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));//鍏ㄩ儴璁句负0
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);//鍋舵牎楠? break;
case ‘E‘:
newtio.c_iflag |= (INPCK | ISTRIP);
newtio.c_cflag |= PARENB;
newtio.c_cflag |= ~PARODD;//濂囨牎楠? case ‘N‘:
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!\n");
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 >>>>>..\n");
}
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\n");
}
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 ..............\n");
}
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.......................\n");
}
if(fcntl(fd,F_SETFL,0)<0)
printf("fcntl falled !\n");
else
printf("fcntl =%d\n",fcntl(fd,F_SETFL,0));
if(isatty(STDIN_FILENO)==0)
printf("standard input is not a terminal device\n");
else
printf("isatty success!\n");
printf("fd-open=%d\n",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\n",fd);
printf("fd1 = %d\n",fd1);
/* for(i=0;i<100;i++)
{
nread = write(fd,buff,8);
printf("nread = %d,%s\n",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属性!

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

时间: 2024-08-03 16:58:23

基于UP-CUP6410点灯实验完成的相关文章

基于SoCkit的opencl实验1-基础例程

基于SoCkit的opencl实验1-基础例程 准备软硬件 Arrow SoCkit Board 4GB or larger microSD Card Quartus II v14.1 SoCEDS v14.1 Altera SDK for OpenCL v14.1 (A license for these tools.There are 60-day evaluation licenses available via your FAE. You will need to provide a N

zigbee学习之路(十五):基于协议栈的按键实验

一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BUT1 按下,LED1 闪烁两次. 三.代码讲解 大家还记得,前面做过的按键实验是怎么配置的吗,其实基于zigbee的协议栈原理是差不多的,我们要对按键的接口和状态是差不多,TI已经为我们建立了专用的按键配置的代码文件,我们只要在此基础上修改就行了.先打开hel_key.c进行修改,下面是代码 #de

基于SSH框架的实验报告系统

其实也可以算成是作业系统,老师可以发布作业,实验内容,学生完成提交,老师批改给分.前端主要是之前在CSDN下载的一个资源的前端,原作者做得很漂亮就拿来用了(前端硬伤,还有几个页面是同学做的,在此谢过原作者和同学,改用了一些图片和文字).其实写这篇博文的目的还是想用CSDN的CODE的功能,自己折腾了一个下午,了解CODE的帮助和git工具,原来版本控制这么好玩且方便.传说中的一个程序员向另外一个程序员的发出的挑战就是一个项目下的分支. 主页: 为了将框架那些零零碎碎的东西和3个框架整合起来,就搭

PKI基本原理与基于思科IOS的实验

我们知道明文数据在网络上传输是非常不安全的,想要实现数据传输的安全,需要考虑以下几个方面: 私密性:数据私密性就是对数据进行加密,即使数据被截获也不知道内容是什么.通过加密算法对数据进行加密. 完整性:数据完整性能够保证数据在传输过程中不篡改,通过散列函数算法对数据进行完整性检验. 源认证:源认证能够对数据的发送者进行验证,确保数据发送方是合法的,通过H-MAC或数字签名来对数据进行源认证. 不可否认性:又叫抗抵赖性,能够保证人们不能否认自己发送数据的行为和数据的内容,通过数字签名来实现不可否认

Arduino与xbee模块点灯实验心得

1.硬件:Seeeduino Stalker v3.0俩块,xbeeS1俩块,led一个,导线,电源,面包板 软件:XCTU,Arduino1.8.2 2.xbee模块配置:恢复出场设置后 主机xbee的    DH:1234,MY:5678 从机xbee的    DH:5678,  MY:1234 (API为disabled,也就是AP模式(默认出厂设置),API模式以前用过,后来做过一个关于节点发现的实验后,就不好使了) 3.主机程序: int button_open =4;//开灯按钮连在

基于服务器的AAA实验(Cisco)

拓扑图如下: 地址表如下: Device   Interface   IP Address   Subnet Mask   R1 Fa0/0 192.168.1.1 255.255.255.0 S0/0/0 10.1.1.2 255.255.255.252     R2 S0/0/0 10.1.1.1 255.255.255.252 Fa0/0 192.168.2.1 255.255.255.0 S0/0/1 10.2.2.1 255.255.255.252   R3 S0/0/1 10.2.2

基于服务器的AAA实验

拓扑图 如下: 地址表如下: 三个pc机相互ping通 pc-a与pc-b pc-a与pc-c pc-b与pc-c R1: R1(config)#username admin1 password Admin1 R1(config)# aaa new-model R1(config)#aaa authentication login default local R1(config)#line console 0 R1(config-line)#login authentication defaul

「ZigBee模块」组网实验-无线点灯

ZigBee入门小实验——无线点灯 写在前面:无线点灯实验不涉及协议栈,只是对Basic RF的应用,但是其中关于数据收发的思想和协议栈类似,可以借鉴.这个代码和实验过程都是参考某教程的,然后有加上自己的理解......欢迎纠错(*^__^*) 一.设备 两个ZigBee模块 一个方口USB线(这个只是供电用,要看自己模块用什么接口,不一定是方口的,用电池也行) 一个编译器 二.几个名词解释 CCM -Counter with CBC-MAC(mode of operation) 就知道和加密有

Microsemi Libero系列教程(二)——新建点灯工程

前言 上一篇文章,介绍了Microsemi Libero系列教程(一)-Libero开发环境介绍,下载,安装与注册,作为嵌入式开发中的Hello World,点灯是再也基础不过的实验了,通过点灯实验,可以了解芯片GPIO的控制和开发环境IDE新建工程的流程,对于FPGA来说,每个IO口几乎一样,所以本篇文章主要学习一下如何基于Microsemi Libero集成开发环境建立一个示例工程,让一个LED以500ms的频率闪烁,以Microsemi SmartFusion系列FPGA--A2F200M