C ~ 一个串口接收思路
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 ~ 一个串口接收思路的更多相关文章
- STM32 ucosii 串口接收数据 遇到的问题及解决思路
写一个程序,用到了ucos ii ,串口在中断中接收数据(一包数据 8个字节 包含: 1byte包头 5byte数据 1byte校验和 1byte 包尾 ) ,数据由上位机每隔500ms发送一次,在串 ...
- 基于Verilog的带FIFO输出缓冲的串口接收接口封装
一.模块框图及基本思路 rx_module:串口接收的核心模块,详细介绍请见“基于Verilog的串口接收实验” rx2fifo_module:rx_module与rx_fifo之间的控制模块,其功能 ...
- 基于Verilog的串口接收程序
一.模块框图及基本思路 detect_module:检测输入引脚的下降沿,以此判断一帧数据的开始 rx_bps_module:波特率时钟产生模块 rx_control_module:串口接收的核心控制 ...
- STM32串口接收不定长数据原理与源程序(转)
今天说一下STM32单片机的接收不定长度字节数据的方法.由于STM32单片机带IDLE中断,所以利用这个中断,可以接收不定长字节的数据,由于STM32属于ARM单片机,所以这篇文章的方法也适合其他的A ...
- stm32的串口接收字符串以十六进制数
#include "pbdata.h" uint8_t TxBuffer1[] = "USART Interrupt Example: This isUSART1 ...
- mfc的一个串口类
这几天一直再看串口相关知识,对于其总结为如下串口类: 头文件声明如下: #pragma once // 声明当串口接收到线程的时候调用的函数指针 // 参数: 1,接收到的数据: 2,数据长度: 3, ...
- 2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9490616.html 本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC ...
- STM32 HAL库使用中断实现串口接收不定长数据
以前用DMA实现接收不定长数据,DMA的方法接收串口助手的数据,全部没问题,不过如果接收模块返回的数据,而这些数据如果包含回车换行的话就会停止接收,例如接收:AT\r\nOK\r\n,就只能接收到AT ...
- 018_STM32程序移植之_串口接收中文
(一)在平时数据传输中很少用到接收中文的情况,但是最近需要用到就花了半天时间来弄弄 (二)接收原理,从现在接收情况分析:一个中文占两个数据的空间,也就是两个十六进制可以转化成为一个中文 (三)示例情况 ...
随机推荐
- Linux shell 脚本小记
if结构 #!/bin/env bash -gt ] then echo "$1 is positive" -lt ] then echo "$1 is negative ...
- FWT 学习总结
我理解的FWT是在二元运算意义下的卷积 目前比较熟练掌握的集合对称差卷积 对于子集卷积和集合并卷积掌握不是很熟练(挖坑ing) 那么就先来谈一谈集合对称差卷积吧 所谓集合对称差卷积 就是h(i)=si ...
- 李洪强iOS开发之零基础学习iOS开发【02-C语言】03-关键字、标识符、注释
上一讲中已经创建了第一个C语言程序,知道了C程序是由函数构成的,这讲继续学习C语言的一些基本语法.C语言属于一门高级语言,其实,所有的高级语言的基本语法组成部分都是一样的,只是表现形式不太一样.就好像 ...
- [hackerrank]Closest Number
https://www.hackerrank.com/contests/w5/challenges/closest-number 简单题. #include <iostream> #inc ...
- [z]Google SPDY介绍
转自 http://blog.csdn.net/marcky/article/details/7728662 本文主要是参考Google SPDY项目主页的一些文档总结而来,目的整体上介绍SPDY协议 ...
- 在屏幕上显示C盘根目录下的所有文件和文件夹
1 import java.io.File; //在屏幕上显示C盘根目录下的所有文件和文件夹 public class ListDemo { public static void main(Strin ...
- 学习Hadoop不错的系列文章
1)Hadoop学习总结 (1)HDFS简介 (2)HDFS读写过程解析 (3)Map-Reduce入门 (4)Map-Reduce的过程解析 (5)Hadoop的运行痕迹 (6)Apache Had ...
- Codeforces Round #204 (Div. 2) C
写了一记忆化 TLE了 把double换成long long就过了 double 这么耗时间啊 #include <iostream> #include<cstdio> #i ...
- Codeforces_GYM Flight Boarding Optimization
(ACM ICPC 2013–2014, NEERC, Northern Subregional Contest) Flight Boarding OptimizationInput file: fl ...
- 使用Java VisualVM监控远程JVM
我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualV ...