在串口中断接受的数据放在一个数组中,现在想要取出数据

在串口中断接受的数据放在一个数组中(比如3.1415),现在想要取出数据,该怎么操作?

chttps://ask.csdn.net/questions/7617701?answer=53646116



全局定义数组,中断接收的时候写入,在需要用到数据的地方直接操作数组即可

直接对数组进行操作就好

u8 Uart_Flag =0;
u8 Uart_Num =0;
u8 Uart_RxSTA =0;
u8 USART_RX_BUF[10];


void  uart_init(void)
{
    //配置接收中断
    //接收中断优先级一定要高。
}
void UART_IRQHandler(void)
{
    u8 res;
    //接收到数据中断
    if(USART1->SR&(1<<5))
    {     
        res=USART1->DR; 
        if((Uart_RxSTA&0x80)==0)//接收未完成
        {
            if(Uart_RxSTA&0x40)//接收到了0x0d
            {
                if(res!=0x0a)//接收错误,重新开始
                {
                    Uart_RxSTA=0;
                }
                else//接收完成了 
                {
                    Uart_Num = Uart_RxSTA;//记下接收的字节数
                    Uart_Flag =1;//接收完成标志
                    Uart_RxSTA|=0x80;    //清接收字节
                }
            }
            else //还没收到0X0D
            {    
                if(res==0x0d)Uart_RxSTA|=0x40;
                else
                {
                    USART_RX_BUF[Uart_RxSTA&0X3F]=res;
                    Uart_RxSTA++;
                    if(Uart_RxSTA>10)Uart_RxSTA=0;//接收数据错误,重新开始接收      
                }         
            }
        }
}
}


#include <stdio.h>
#include <stdlib.h>
//double  strtod ( const  char  *nptr, char  **endptr);strtod()会扫描参数nptr
//字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,
//到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。

//
void main (void)
{
    double  data =0;;

    while(1)
    {
        if(Uart_Flag==1)
        {
            Uart_Flag =0;
            data = strtod(USART_RX_BUF,NULL) //字符串转成浮点数据
        }
    }
}