关于CC2530串口中断接收的问题

2019-03-24 19:04发布

CC2530串口中断接收的自定义缓存BUF最大可以定义多大? 我现在需要一个最少160字节的BUF存接收到的数据进行解析;但是定义buf[160]后用IAR编译总是提示IDATA空间不够;后来通过调节IAR-option -stack/heap 中的设置;但是最大也是只能设置到buf[135]个字节 我看了2530的芯片手册 上面说它的SARM有8K;不知道是什么原因;我把代码发给大家看看;求各位大侠帮帮忙;不胜感激
#include <iocc2530.h>
#include <string.h>
//宏定义
#define uint unsigned int
#define uchar unsigned char
/*函数声明和定义*******************************/
void inituart0(void);
void uarttx_send_string(uchar *data,int len);
void uart_send_char(uchar ch);
void delay_ms(uint i_delay);
void Clear_UART0(void);
uint send_messge();
/*变量定义和赋值*******************************/
uchar recdata[130]="";//就是这里希望能定义160个字节的空间
uchar temp=0;   //无数据接收到时,设为0
uint  datanumber=0;//接收字符串计数  
  uchar send_content[]={"such handsome"};//发送短信内容
//初始化串口0函数
void inituart0(void)
{  
CLKCONCMD &=0XBF;//系统时钟为32MHZ  
while(CLKCONSTA & 0X40);//等待时钟稳定  
CLKCONCMD &=0XF8;//主时钟频率为32MHZ   
PERCFG &=0XFE;//设USART0的ALT 1  
P0SEL |=0X3C;//P0口2、3、4、5做外设  
P2DIR &=0X3F;//P0外设优先级USART0最高   
U0CSR |=0X80;//设USART0 工作方式为UART
  U0GCR |=8;  //设置波特率
U0BAUD =0x3b;//设波特率  
UTX0IF=0;//UART0 TX中断标志位清0
}
//串口发送字符
void uart_send_char(uchar ch)
{
  U0DBUF=ch;
  while(UTX0IF==0);
  UTX0IF=0;
}
//串口发送字符串函数
void uarttx_send_string(uchar *data,int len)
{  
  int j;  
  for(j=0;j<len;j++)  
  {   
   U0DBUF=*data++;   
   while(UTX0IF==0);
   UTX0IF=0;
  }
}
//延时函数
void delay_ms(uint i_delay)
{
  uint i,j;
  for(i = 0; i< i_delay; i++)
  {
   for(j = 0; j < 200; j++)
   {
    asm("NOP");
       asm("NOP");
       asm("NOP");
        asm("NOP");
       asm("NOP");
       asm("NOP");
        asm("NOP");
       asm("NOP");
       asm("NOP");
        asm("NOP");
   }
  }
}
//串口清0函数
void Clear_UART0()
{
  uchar i;
  for(i = 0; i<= datanumber;i++)
  {
   recdata=0;
  }
    datanumber = 0;
}
/*接收中断函数*******************************/
//串口接收一个字符,一旦有数据从串口传至CC2530,
//则进入中断,将接收到的数据赋值给变量temp。
#pragma vector=URX0_VECTOR
__interrupt void UART0_ISR(void)
{  
   
temp=U0DBUF;//读取缓存到temp

if(temp!=0)     
{      
  //if((temp!=' ')&&(datanumber<80))//' '被定义为结束字符,最多能接收80个字符  
  //{         
     recdata[datanumber++]=temp;   
  //}
    temp=0;   
  }
  URX0IF=0;//清标志
}
此帖出自小平头技术问答
0条回答

一周热门 更多>