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; 
         } 
    }
    

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

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

  • 相关阅读:
    CF1051D Bicolorings dp
    loj2480 [CEOI2017]One-Way Streets 边双+树上差分
    有趣的支配树
    AtCoder Regular Contest 81
    [BZOJ5305][HAOI2018]苹果树(DP)
    [BZOJ4699]树上的最短路(最短路+线段树)
    [BZOJ3507][CQOI2014]通配符匹配(DP+Hash)
    [Luogu4724][模板]三维凸包(增量构造法)
    [BZOJ5317][JSOI2018]部落战争(闵可夫斯基和)
    [WC2014]时空穿梭(莫比乌斯反演)
  • 原文地址:https://www.cnblogs.com/simonlin/p/5023566.html
Copyright © 2011-2022 走看看