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

    定义数组

#define MAX_LENTH 100
#define u8 unsigned char
u8 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;
     }
}

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

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

stm32串口之存储与解析的更多相关文章

  1. stm32串口接收中断协议解析

    借鉴了文章:<stm32串口中断接收方式详细比较> 文章地址:http://blog.csdn.net/kevinhg/article/details/40186169 串口的配置这里不做 ...

  2. STM32内部flash存储小数——别样的C语言技巧

    今天在进行STM32内部falsh存储的时候,发现固件库历程的函数原型是这样的: 第一个是地址,在我的STM32中是2K一页的,第二个是要写入的数据. 问题就来了,存储一个小数该怎么办呢?固件库给的是 ...

  3. stm32串口接收完整的数据包

    参考了文章:<stm32串口中断接收方式详细比较> 文章地址:http://bbs.elecfans.com/jishu_357017_1_1.html 借鉴了第四种中断方式 串口的配置这 ...

  4. stm32串口通信实验,一点笔记

    第一次深入学习stm32,花了好长时间才看懂代码(主要是C语言学习不够深入),又花了段时间自己敲了一遍,然后比对教程,了解了利用中断来串口通信的设置方法. 板子是探索版f407,本实验工程把正点原子库 ...

  5. STM32—串口使用总结

    文章目录 一.仅向上位机打印调试信息 二.与上位机交互信息 三.作为驱动接口 四.结合DMA接收数据帧 在日常学习中,串口经常作为和上位机通信的接口,进行打印信息方便调试程序,有时也会作为模块的驱动接 ...

  6. STM32 串口DMA方式接收(转)

    STM32 是一款基于ARM Cortex-M3内核的32位MCU,主频最高可达72M.最近因为要在车机上集成TPMS功能, 便开始着手STM32的开发工作,STM32F10x系列共有5个串口(USA ...

  7. STM32串口寄存器操作(转)

    源:STM32串口寄存器操作 //USART.C /************************************************************************** ...

  8. stm32串口通讯问题

    stm32串口通讯问题 在串口试验中,串口通讯不正常,则可能会出现以下问题: 1. 配置完成后,串口没有任何消息打印. 原因:1,端口配置有问题,需要重新检查I/O口的配置 2,接线有问题,检查接线是 ...

  9. STM32串口控制步进电机(原创)

    用的42步进电机: 厂家可能不一样,两项四线步进电机,里面有两个线圈.在电机什么电都没有接的情况下,用万用表测量四个管脚:两两短接(或者阻值很小)的为一组,可以分别接A+,a-剩余接B+,B-;顺序可 ...

随机推荐

  1. LeetCode() 数字1的个数

    int ones = 0; for (long m = 1; m <= n; m *= 10) { long a = n/m, b = n%m; ones += (a + 8) / 10 * m ...

  2. JavaBean基本用法示例(二)

    JavaBean的第二种用法,是接收form组件的请求赋值. 一.修改person类.因为这一次是两个网页之间的数据传输,受中文乱码问题的影响,所以在person类中添加一个用于转码的函数,并且在每一 ...

  3. javascript的document.execCommand(转)

    document.execCommand()方法处理html数据时常用语法格式如下: 代码: document.execCommand(sCommand[,交互方式, 动态参数]) 其 中:sComm ...

  4. ElasticSearch中的简单查询

    前言 最近修改项目,又看了下ElasticSearch中的搜索,所以简单整理一下其中的查询语句等.都是比较基础的.PS,好久没写博客了..大概就是因为懒吧.闲言少叙书归正传. 查询示例 http:// ...

  5. win7下IIS错误:"无法访问请求的页面,因为该页的相关配置数据无效"的解决方法(转)

    今天新装win7,然后在IIS下布署了一个网站,布署完成后运行,提示如下错误:HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效 ...

  6. SVD分解的理解[转载]

    http://www.bfcat.com/index.php/2012/03/svd-tutorial/ SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视.实际上,SVD分解不但很 ...

  7. hpp头文件与h头文件的区别

    hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译.而实现代码将直接 ...

  8. CodeVS 数轴染色

    #include<cstdio> #include<algorithm> using namespace std; #define lson rt<<1 #defi ...

  9. repeat语句

    一.repeat语句格式repeat语句用于"重复执行循环体,直到指定的条件为真时为止" repeat语句格式:repeat  语句1;  语句2;  --  语句n;until ...

  10. PaintCode调研

    1.   背景 PaintCode是一款面向iOS和Mac应用开发者及设计师的矢量图形可视化开发工具.它可以让设计师把设计好的psd文件直接导入该工具,然后生成用Quartz 2D 产生的object ...