在串口中断接受的数据放在一个数组中(比如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) //字符串转成浮点数据
}
}
}