关闭

CC2530之UART串口通信

标签: 串口通信单片机
1961人阅读 评论(0) 收藏 举报
分类:

  利用单片机的串口与计算机通信,可方便对各种实验数据进行观察。
  CC2530有两个串口,分别为USART0和USART1。由于采用了引脚复用功能,外设与引脚对应的关系可根据外设控制寄存器PERCFG进行配置,具体对应情况如下:

UART0对应的外部引脚关系,位置1:Rx - P0_2 Tx - P0_3 ;位置2:Rx - P1_4 Tx - P1_5
UART1对应的外部引脚关系,位置1:Rx – P0_5 Tx – P0_4;位置2:Rx - P1_7 Tx - P1_6

由寄存器UxBAUD.BAUD_M[7: 0]和UxGCR.BAUD_E[4: 0]定义波特率。

串口波特率设置公式:这里写图片描述

选择外部32MHz晶振时,具体值可参阅下表:

这里写图片描述

测试程序如下:

#include <iocc2530.h>

#define uint unsigned int
#define uchar unsigned char

void setSysClock();
void uart0Init();
void uart0SendStr(uchar *str);

void main()
{
    setSysClock();       
    uart0Init();

    uart0SendStr("Hello world\n");

    while (1) {

    }
}

/**
 * 设置系统时钟为32MHz
 */
void setSysClock()
{
    CLKCONCMD &= ~0x40;           // 选择系统时钟源为外部32MHz crystal oscillator
    while(CLKCONSTA & 0x40);      // 等待晶振启动 
    CLKCONCMD &= ~0x47;           // 设置系统时钟频率为32MHZ  
}

/**
 * 8-bit数据位,无奇偶校验,Baud:115200bps
 */
void uart0Init()
{
    PERCFG = 0x00;   // 外设控制,UART0选择端口位置1 
    P0SEL = 0x0C;    // 端口0功能选择,P0_2、P0_3用作串口
    P2DIR &= ~0xC0;  // 端口0外设优先级控制,高2位置0,USART0优先

    U0CSR |= 0x80;   // UART模式
    U0GCR |= 11;
    U0BAUD |= 216;   // 采用32MHz系统时钟时,波特率设置为115200
    UTX0IF = 0;      // UART0 TX中断标志初始置位0

}

void uart0SendStr(uchar *str)
{
    while (*str != '\0') {
        U0DBUF = *str++;
        while(UTX0IF != 1);  // 等待发送完成
        UTX0IF = 0; 
    }
}

采用上位机观察实验结果

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:35607次
    • 积分:606
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:1篇
    • 译文:0篇
    • 评论:2条
    最新评论