远程点灯实验

实验目的:

实现远程点灯,通过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!\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属性!

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

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

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

    基于SoCkit的opencl实验1-基础例程 准备软硬件 Arrow SoCkit Board 4GB or larger microSD Card Quartus II v14.1 SoCEDS ...

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

    一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...

  3. zigbee学习之路(十三):基于协议栈的Usart 实验

    一.前言 这次实验我们来学习基于zigbee的串口通信实验,揭开zigbee神秘的面纱,让大家可以用zigbee协议编制属于自己的程序,这次实验只是串口发送数据,并没有进行无线的数据传输,为的是使大家 ...

  4. 基于Verilog HDL 各种实验

    菜鸟做的的小实验链接汇总:           1.基于Verilog HDL 的数字时钟设计 2.乘法器 3.触发器(基本的SR触发器.同步触发器.D触发器) 4.基于Verilog HDL的ADC ...

  5. 基于服务器AAA的实验

    1.实验拓扑 2.地址分配   Device   Interface   IP Address   Subnet Mask   R0 Fa0/0 192.168.1.2 255.255.255.0 S ...

  6. UART学习之路(三)基于STM32F103的USART实验

    关于STM32串口的资料可以在RM0008 Reference Manual中找到,有中文版的资料.STM32F103支持5个串口,选取USART1用来实验,其对应的IO口为PA9和PA10.这次的实 ...

  7. 基于FPGA的通信系统实验

    伪随机信号发生器 1.伪随机信号发生器原理 伪随机信号发生器又叫PN序列发生器或者是m序列发生器.m序列是一种线性反馈寄存器序列,m序列的产生可以利用r级寄存器产生长度为2^r-1的m序列,该实验中采 ...

  8. GeekOS: 一、构建基于Ubuntu9.04的实验环境

    参考:http://www.cnblogs.com/wuchang/archive/2009/05/05/1450311.html 补充:在最后步骤中,执行bochs即可弹出运行窗口

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

    前言 上一篇文章,介绍了Microsemi Libero系列教程(一)-Libero开发环境介绍,下载,安装与注册,作为嵌入式开发中的Hello World,点灯是再也基础不过的实验了,通过点灯实验, ...

随机推荐

  1. [Stanford 2011] 知识点小结

    1.获得帮助:option+click /  option+double click 2.@property里的nonatomic,表示非原子性访问,atomic是obj-c里使用的一种线程保护技术, ...

  2. SQL PROMPT 取消dbo前缀

    SQL Prompt 无疑大大提高了开发者的效率,高效而简单,特别适合大型的数据库脚本编写,但遗憾得是至今没有可供使用的中文版本.SQL Prompt 默认对象名前面会有 dbo 前缀,在一些场合这样 ...

  3. EntityFramework执行SQL语句

    在EF中执行Sql语句. using (var context = new EFRecipesEntities()) { string sql = @"insert into Chapter ...

  4. python入门 2014-3-21

    刚吃完饭,写一会python 准备去上课,哇咔咔! 1.python是动态类型语言,也就是说 不需要预先声明变量的类型. 不支持 自增++ , 自减--

  5. LeetCode Count Complete Tree Nodes

    原题链接在这里:https://leetcode.com/problems/count-complete-tree-nodes/ Given a complete binary tree, count ...

  6. RHEL6解决无法使用YUM源问题

    RHEL的YUM源需要注册用户才能更新使用,由于CentOS和RHEL基本没有区别,并且CentOS已经被REHL收购.所以将RHEL的YUM源替换为CentOS即可.问题如下:[root@bogon ...

  7. Android 自定义TimePickerDialog

    学习Android半年了,一直想写点东西,今天开始写第一篇,目前在弄的一个小项目,是关于课程表智能闹钟,今天做这个TimePickerDialog查了很多资料,做成了下面这个效果, 这里timepic ...

  8. onRetainNonConfigurationInstance和getLastNonConfigurationInstance

    很多网友可能知道Android横竖屏切换时会触发onSaveInstanceState,而还原时会产生 onRestoreInstanceState,但是Android的Activity类还有一个方法 ...

  9. Android --通知栏Notification

    参考博客:Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它) //创建一个通知栏的Builder构造类 (Create a Notification Bui ...

  10. Android --资料集合

    google android 官方教程 http://hukai.me/android-training-course-in-chinese/basics/index.html android视频资料 ...