CC2530的串口实验主要有编程主要有一下几个步骤:
一、串口初始化函数(设置时钟频率-->选择用来当做串口的IO-->设置波特率-->发送中断设为0)
一、串口初始化函数(设置时钟频率-->选择用来当做串口的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);
}
}