博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
stm32串口之存储与解析
阅读量:6248 次
发布时间:2019-06-22

本文共 1208 字,大约阅读时间需要 4 分钟。

    最近在做一个小项目,需要用stm32串口接受Arduino发送的一个不定长的数据,并且解析数据,执行其中的命令;秉着不在中断中做过多任务的思想,我们将从串口中接受到的字符放到一个数组当中。

    定义数组

#define MAX_LENTH 100#define u8 unsigned charu8 getCharFromArduino[MAX_LENTH];

    串口中断函数

u8 *theNextCharAddress = getCharFromArduino;     //指针指向下一个存储位置 void USART1_IRQHandler(void){	static u8 n=0;	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)	{ 				  		*theNextCharAddress = USART_ReceiveData(USART1);  //存储数据			theNextCharAddress++;             //指针指向下一个存储位置 			if(theNextCharAddress < getCharFromArduino[MAX_LENTH])    //形成一个环形的存储空间                        {                          //do noting                         }                        else{theNextCharAddress = GETCHARNUMBER;}			theNextCharAddress = &getCharFromArduino[n];	}}

   主函数中的解析函数

void dealDataFromArduino(){	static u8 *p = getCharFromArduino;  		if(p == theNextCharAddress)      //解析完毕	 {		//Do Nothing	 }	else	 {		//解析	 }	 p++;                   //指针指向下一个解析位置       if(p < &getCharFromArduino[GETCHARNUMBER])      {       //do noting      }     else      {        p = getCharFromArduino;      } }

 


这是一种比较简单的接受,处理串口数据的方法;缺点是若存储的速度>>读取的速度时,数据发生了丢失却没有报错;

 

第一次发博客,希望各路看官批评指导。

 

转载于:https://www.cnblogs.com/simonlin/p/5023566.html

你可能感兴趣的文章
在windows server2003下安装Redmine
查看>>
mysql 加入列,改动列,删除列。
查看>>
HTTPWatch使用
查看>>
如何确定照片是否被PS过
查看>>
Reverse Nodes in k-Group
查看>>
使用android快速开发框架afinal的FinalDb操作android数据库
查看>>
在SSH框架中使用Spring的好处(转)
查看>>
【MATLAB】读取和写入文本文件
查看>>
Android中实现Launcher功能之二 ----- 添加窗口小部件以及AppWidget的创建详解
查看>>
Handler sendMessage 与 obtainMessage (sendToTarget)比较
查看>>
Working in Singapore
查看>>
php发送get、post请求的几种方法
查看>>
Linux多线程同步方式
查看>>
【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群(第五步)(2)...
查看>>
2015第9周二
查看>>
Android监听外部存储设备的状态(SD卡、U盘等等)
查看>>
Execute Javascript in iOS Applications
查看>>
linux 内核驱动--Platform Device和Platform_driver注册过程
查看>>
ArcGis 计算线段长度
查看>>
Red Hat Enterprise Linux 各个版本以及发布日期
查看>>