zoukankan      html  css  js  c++  java
  • stm32串口之存储与解析

        最近在做一个小项目,需要用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; 
         } 
    }
    

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

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

  • 相关阅读:
    poj 1743 Musical Theme 后缀数组
    poj 1743 Musical Theme 后缀数组
    cf 432D Prefixes and Suffixes kmp
    cf 432D Prefixes and Suffixes kmp
    hdu Data Structure? 线段树
    关于position和anchorPoint之间的关系
    ios POST 信息
    CALayers的代码示例
    CALayers详解
    ios中得sqlite使用基础
  • 原文地址:https://www.cnblogs.com/simonlin/p/5023566.html
Copyright © 2011-2022 走看看