void uart_rx_isr(void) //接收中断函数
{
uchar c;
c=SBUF;//c等于接收的字节;
switch (recv_state)
{
case :
if (c==0x02) // 是数组第一字节
{
recv_state=; // 进入下一个状态
}
else
recv_state=; // 回到初始状态
break; case :
if (c!=0xff) // 是数组第二字节 拢共 3位数据 中间这位 为数据位 就不进行校验判断了
{
recv_state=; // 进入下一个状态
Rx_Data=SBUF; //把 这个数据 纪录下来 作为 后面的判断
}
else
{
recv_state=; // 回到初始状态
}
break; case :
if (c==0x03) // 是数组第三字节
{
// recv_state=3; // 进入下一个状态
Flag=;
recv_state=; // 回到初始状态
}
else
{
recv_state=; // 回到初始状态
}
break;
}
} void UART_interrupt() interrupt
{
if(RI==)//如果接收了数据(RI会置1)
{
RI=; //先清零,下次可以在接收数据
uart_rx_isr(); //调用数据判断这个函数
}
}

串口数据串位后进行排列

void RecvDataDispose(uint8_t *Buff)
{
uint8_t i=0;
uint8_t TempBuff[16]={0};
for(i = 0;i<16;i++)
{
if(i<=12)
{
if((DisposeData[i] == 0xAA)&&(DisposeData[i+1] == 0xBB)&&(DisposeData[i+2] == 0xCC)&&(DisposeData[i+3] == 0xDD)) //Ö¡Í·³öÏÖ
{
memcpy(TempBuff,DisposeData+i,16-i);
memcpy(TempBuff+16-i,DisposeData,i);
memcpy(FinalData,TempBuff,16);
break;
}
}
else
{
memcpy(TempBuff,DisposeData+13,3);
memcpy(TempBuff+3,DisposeData,13);
memcpy(DisposeData,TempBuff,16);
for(i=0;i<=12;i++)
{
if((DisposeData[i] == 0xAA)&&(DisposeData[i+1] == 0xBB)&&(DisposeData[i+2] == 0xCC)&&(DisposeData[i+3] == 0xDD)) //Ö¡Í·³öÏÖ
{
memcpy(TempBuff,DisposeData+i,16-i);
memcpy(TempBuff+16-i,DisposeData,i);
memcpy(FinalData,TempBuff,16);
break;
}
}
break;
}
}
}

C ~ 一个串口接收思路的更多相关文章

  1. STM32 ucosii 串口接收数据 遇到的问题及解决思路

    写一个程序,用到了ucos ii ,串口在中断中接收数据(一包数据 8个字节 包含: 1byte包头 5byte数据 1byte校验和 1byte 包尾 ) ,数据由上位机每隔500ms发送一次,在串 ...

  2. 基于Verilog的带FIFO输出缓冲的串口接收接口封装

    一.模块框图及基本思路 rx_module:串口接收的核心模块,详细介绍请见“基于Verilog的串口接收实验” rx2fifo_module:rx_module与rx_fifo之间的控制模块,其功能 ...

  3. 基于Verilog的串口接收程序

    一.模块框图及基本思路 detect_module:检测输入引脚的下降沿,以此判断一帧数据的开始 rx_bps_module:波特率时钟产生模块 rx_control_module:串口接收的核心控制 ...

  4. STM32串口接收不定长数据原理与源程序(转)

    今天说一下STM32单片机的接收不定长度字节数据的方法.由于STM32单片机带IDLE中断,所以利用这个中断,可以接收不定长字节的数据,由于STM32属于ARM单片机,所以这篇文章的方法也适合其他的A ...

  5. stm32的串口接收字符串以十六进制数

      #include "pbdata.h"   uint8_t TxBuffer1[] = "USART Interrupt Example: This isUSART1 ...

  6. mfc的一个串口类

    这几天一直再看串口相关知识,对于其总结为如下串口类: 头文件声明如下: #pragma once // 声明当串口接收到线程的时候调用的函数指针 // 参数: 1,接收到的数据: 2,数据长度: 3, ...

  7. 2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9490616.html 本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC ...

  8. STM32 HAL库使用中断实现串口接收不定长数据

    以前用DMA实现接收不定长数据,DMA的方法接收串口助手的数据,全部没问题,不过如果接收模块返回的数据,而这些数据如果包含回车换行的话就会停止接收,例如接收:AT\r\nOK\r\n,就只能接收到AT ...

  9. 018_STM32程序移植之_串口接收中文

    (一)在平时数据传输中很少用到接收中文的情况,但是最近需要用到就花了半天时间来弄弄 (二)接收原理,从现在接收情况分析:一个中文占两个数据的空间,也就是两个十六进制可以转化成为一个中文 (三)示例情况 ...

随机推荐

  1. Project Euler 100 : Arranged probability 安排概率

    Arranged probability If a box contains twenty-one coloured discs, composed of fifteen blue discs and ...

  2. [topcoder]LongLongTripDiv2

    http://community.topcoder.com/stat?c=problem_statement&pm=13091 解方程,对中国孩子太简单了. #include <vect ...

  3. MySQL 建表字段长度的限制

    脑补,varchar(N),N指的是最大字符数,不是字节数. 先上测试说明:   在MySQL建表时,遇到一个奇怪的现象: root@localhost : test 10:30:54>CREA ...

  4. linux内核--进程与线程

    http://blog.csdn.net/yusiguyuan/article/details/12154823 在<linux内核设计与实现>中第三章讲解了进程管理,在关于进程和线程的概 ...

  5. Java学习笔记之:Java简介

    一.引言 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出. ...

  6. SQLite数据库的体系结构(翻译自sqlite.org)

    $1 简介    本文档描述了SQLite库的体系结构,这些信息对那些想理解和修改SQLite的内部工作机制的人是有用的.    下图显示了SQLite的主要组成部件及其相互关系,下面的内容将描述每一 ...

  7. Java API —— 网络编程

    1.网络编程概述     1)网络编程概述     · 计算机网络         是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通 ...

  8. 解决Cygwin中vim的backspace不能正常使用(转)

    转载于:http://blog.chinaunix.net/uid-20614631-id-1914849.html  亲测可用 先把Cygwin下载下来,想在linux下编程的话一定要安装vim,g ...

  9. Windows JAVA 环境配置

    Java SE Development Kit Downloads http://www.oracle.com/technetwork/java/javase/overview/index.html ...

  10. NodeJS常用库说明

    underscore:1.合并json async:1.异步编程同步化