CC2530的串口实验

CC2530的串口实验主要有编程主要有一下几个步骤:

一、串口初始化函数(设置时钟频率-->选择用来当做串口的IO-->设置波特率-->发送中断设为0)

二、字符串发送函数(U0DBUF填充字符-->等待串口发送完毕-->发送中断标志设为0,准备下次发送

代码1:

/****************************************************************************
* 文 件 名: main.c
* 作    者: Andy
* 修    订: 2018-01-08
* 版    本: 1.0
* 描    述: 设置串口调试助手波特率:115200bps 8N1
*           会收到CC2530发过来的:Hello Zigbee
****************************************************************************/
#include <ioCC2530.h>
#include <string.h>

typedef unsigned char uchar;
typedef unsigned int  uint;
#define TX_SIZE    20

#define TX_STRING  "Hello Zigbee  "

char TxData[TX_SIZE];        //存储发送字符串

/****************************************************************************
* 名    称: DelayMS()
* 功    能: 以毫秒为单位延时 16M时约为535,32M时要调整,系统时钟不修改默认为16M
* 入口参数: msec 延时参数,值越大延时越久
* 出口参数: 无
****************************************************************************/
void DelayMS(uint msec)
{  
    uint i,j;
    
    for (i=0; i<msec; i++)
        for (j=0; j<1070; j++);
}

/****************************************************************************
* 名    称: InitUart()
* 功    能: 串口初始化函数
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitUart(void)
{ 
    PERCFG = 0x00;           //外设控制寄存器 USART 0的IO位置:0为P0口位置1 
    P0SEL = 0x0c;            //P0_2,P0_3用作串口(外设功能)
    P2DIR &= ~0XC0;          //P0优先作为UART0
    
    U0CSR |= 0x80;           //设置为UART方式
    U0GCR |= 11;				       
    U0BAUD |= 216;           //波特率设为115200
    UTX0IF = 0;              //UART0 TX中断标志初始置位0
}

/****************************************************************************
* 名    称: UartSendString()
* 功    能: 串口发送函数
* 入口参数: Data:发送缓冲区   len:发送长度
* 出口参数: 无
****************************************************************************/
void UartSendString(char *Data, int len)
{
    uint i;
    
    for(i=0; i<len; i++)
    {
        U0DBUF = *Data++;//将数据填充到串口数据寄存器
        while(UTX0IF == 0);//等待串口发送完毕
        UTX0IF = 0;           //将串口中断置为0,准备下一次的发送
    }
}

/****************************************************************************
* 程序入口函数
****************************************************************************/
void main(void)
{	
    CLKCONCMD &= ~0x40;               //设置系统时钟源为32MHZ晶振
    while(CLKCONSTA & 0x40);          //等待晶振稳定为32M
    CLKCONCMD &= ~0x47;               //设置系统主时钟频率为32MHZ   
      
    InitUart();                       //调置串口相关寄存器
    memset(TxData, 0, TX_SIZE);       //数据清0
    memcpy(TxData, TX_STRING, sizeof(TX_STRING)); //复制发送字符串到TxData
        
    while(1)
    {
        UartSendString(TxData, sizeof(TX_STRING)); //串口发送数据
        DelayMS(1000);                 //延时
    }
}

代码2:

#include <ioCC2530.h>  
#include <string.h>  
  
#define YLED P1_0  
#define BLED P1_1  
  
#define LIGHTOPEN 1  
#define LIGHTCLOSE 0  
  
#define uint unsigned int  
#define uchar unsigned char  
  
void Delay(uint n);  
void Init_UsartSend();  
void Uart0_Send_String(char *Data,int len);  
  
char Txdata[25]="hello world";  
  
/************************** 
*@ brief 延时函数 
**************************/  
void Delay(uint n)  
{  
  uint i;  
  for(i=0;i<n;i++);  
  for(i=0;i<n;i++);  
  for(i=0;i<n;i++);  
  for(i=0;i<n;i++);  
  for(i=0;i<n;i++);  
}  
  
/************************** 
*@brief 串口及IO口的初始化函数 
**************************/  
void Init_UsartSend()  
{  
  P1DIR |= 0x03; //P1.0和P1.1设置为输出  
  YLED = LIGHTOPEN;  
  BLED = LIGHTOPEN;  
    
  CLKCONCMD &= ~0X40;     //设置系统时钟源为32MHz晶振  
  while(CLKCONSTA&0X40);  //等待晶振稳定  
  CLKCONCMD &= ~0X47;     //设置系统主时钟频率为32MHz  
    
  PERCFG = 0X00;          //设置外设控制为P0  
  P0SEL = 0X3C;           //选择P0.2,P0.3,P0.4,P0.5作为串口  
  P2DIR &= ~0XC0;         //P0优先级作为UART0  
    
  U0CSR |= 0X80;          //UART方式  
  U0GCR |= 9;            
  U0BAUD |= 59;           //波特率设置为19200  
  UTX0IF |= 0;            //UART0 TX 中断标志初始置为0  
}  
  
/************************** 
* @brief 串口发送函数 
* @param Data - 数据指针 
         len - 数据长度 
**************************/  
void Uart0_Send_String(char *Data,int len)  
{  
  uint i;  
  for(i=0;i<len;i++)  
  {  
    U0DBUF = *Data++; //将数据填充到串口数据寄存器  
    while(UTX0IF==0); //等待串口发送完毕  
    UTX0IF=0;         //将串口中断置为0,准备下一次的发送  
  }  
}  
  
/************************ 
* @brief 主函数 
************************/  
main()  
{  
  uchar i;        
  Init_UsartSend();   
  Uart0_Send_String(Txdata,25);  
  for(i=0;i<25;i++)  
  {  
    Txdata[i] = ' ';    
  }  
  strcpy(Txdata,"   我爱你   ");  
  /*一直使用串口发送数据*/  
  while(1)  
  {  
    Uart0_Send_String(Txdata,sizeof("   我爱你   "));  
    Delay(50000);  
    BLED=!BLED;  
    Delay(50000);  
    Delay(50000);  
  }  
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏波.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值