实验三 串口实验
一.实验目的
学习使用串口实现与PC机的通讯。
正确配置CC2530的串口来实现串口通信的功能。 二.实验环境
硬件:PC机,EBDCC2530节点板,USB接口仿真器,6Pin串口线,交叉串口线。 软件:Windows98/2000/NT/XP,IAR集成开发环境,串口调试助手。 三. 实验原理
下面我们来介绍串口实验所学习到的主要寄存器。 CLKCONCMD:时钟频率控制寄存器。 D7 D6 D5~D3 D2~D0
32KHZ 时间振系统时钟选择 定时器输出标系统主时钟选荡器选择 记 择
D7位为32KHZ时间振荡器选择,0为32KRC震荡,1为32K晶振。默认设置为1。 D6位为系统时钟选择。0为32M晶振,1为16MRC震荡。当D7位为0时D6必须为1。
D5~D3为定时器输出标记。000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为1MHZ,110为500KHZ,111为250KHZ。默认为001。需要注意的是:当D6为1时,定时器最高可采用频率为16MHZ。 D2~D0:系统主时钟选择:000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为1MHZ,110为500KHZ,111为250KHZ。当D6为1时,系统主时钟可采用的最高频率为16MHZ。 CLKCONSTA:时间频率状态寄存器。 D7 D6 D5~D3 D2~D0
32KHZ 时间振荡当前系统时钟 当前定时器输出当前系统主时钟 器选择 标记
D7位为当前32KHZ时间振荡器频率。0为32KRC震荡,1为32K晶振。 D6位为当前系统时钟选择。0为32M晶振,1为16MRC震荡。 D5~D3为当前定时器输出标记。000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为1MHZ,110为500KHZ,111为250KHZ。 D2~D0为当前系统主时钟。000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为1MHZ,110为500KHZ,111为250KHZ。 U0CSR:USART0控制与状态; D7 D6 D5 D4 D3 D2 D1 D0 模式选接收器SPI主/帧错误奇偶错接受状传送状收发主择 使能 从模式 状态 误状态 态 态 动状态
D7为工作模式选择,0为SPI模式,1为USART模式 D6为UART接收器使能,0为禁用接收器,1为接收器使能。 D5为SPI主/从模式选择,0为SPI主模式,1为SPI从模式。 D4为帧错误检测状态,0为无错误,1为出现出错。 D3为奇偶错误检测,0为无错误出现,1为出现奇偶校验错误。 D2为字节接收状态,0为没有收到字节,1为准备好接收字节。 D1为字节传送状态,0为字节没有被传送,1为写到数据缓冲区的字节已经被发送。 D0为USART接收/传送主动状态,0为USART空闲,1为USART忙碌。 U0GCR:USART0通用控制寄存器; D7 D6 D5 D4~D0 SPI 时钟极SPI 时钟相传送位顺序 波特率指数性 位 值
D7为SPI时钟极性:0为负时钟极性,1为正时钟极性; D6为SPI时钟相位。
D5为传送为顺序:0为最低有效位先传送,1为最高有效位先传送。 D4~D0为波特率设置: 波特率 指数小数部
值 分
2400 6 59 4800 7 59 9600 8 59 14400 8 216 19200 9 59 28800 9 216 38400 10 59 57600 10 216 76800 11 59 115200 11 216 230400 12 216
U0BAUD:波特率控制小数部分。(取值参考上表)。 程序流程图:
图2-5-1 串口程序流程图
四.主要代码 主函数:
void main(void) { int ch;
led_beep_init(); xtal_init();
Uart0Init(0x00, 0x00); //初始化串口:无奇偶校验,停止位为1位 Uart_Send_String(\
while(1) {
ch = Uart_Recv_char();
if (ch == '@' || recvCnt >= 256) { recvBuf[recvCnt] = 0;
Uart_Send_String(recvBuf); Uart_Send_String(\ recvCnt = 0;
LED1 = !LED1; //LEDx反转 LED2 = !LED2; LED3 = !LED3; } else {
recvBuf[recvCnt++] = ch; } }
Uart_Send_char:通过Uart0发送字节
void Uart_Send_char(char ch) {
U0DBUF = ch;
while(UTX0IF == 0); UTX0IF = 0; }
Uart_Recv_char:通过Uart0接收字节
int Uart_Recv_char(void) {
int ch;
while (URX0IF == 0); ch = U0DBUF; URX0IF = 0; return ch; }
五.实验步骤
1、正确连接 USB 仿真器的下载线和 EBDCC2530 节点板。把 6Pin 串口线的一端连接到EBDCC2530 节点板的 UART 接口,另一端连接到交叉串口线的母头端口,交叉串口线的另一端连接到 PC 机的公头端口。
2、打开实验源码 uart.eww(路径为:出厂光盘 DISK-EMBV210-WSN\\05-Example\\2 基本接口实验\\2.5 UART) ,编译工程,依次选择“Project”→“Download and Debug”,下载到 CC2530节点板。
3、把仿真器左侧的 USB 接口拔掉,然后拔掉连接在 EBDCC2530 节点板 DBG 位置的调试接口。我们打开 EBDCC2530 节点板右下方的电源开关。 (在不拔掉仿真器的情况下,我们可以通相关的调试进一步观察程序的运行情况。)
4、 在 PC 机上打开串口调试助手软件,设置正确的串口号(即端口的 COM 号), 波