「嵌入式开发」 CC2530卷二 串口通信
关键字:CC2530、ZigBee
摘要: 关于CC2530的学习总结2
一 串口通信配置部分
- 配置内容
根据上述的相关寄存器说明,串口0的配置步骤如下:
(1)通过外设控制寄存器PERCFG配置串口0的位置,即配置P0_2和P0_3用作外设接口而不是普通IO口,接着配置P0优先用作USART0,代码如下:
1 | PERCFG = 0x00;//配置P0_2和P0_3用作串口0的TX(发送端)和RX(接收端) |
(2)设置USART0工作模式为UART0,代码如下:
1 | U0CSR |= 0x80; |
(3)把串口通信的波特率配置115200,配置代码如下:
1 | U0GCR |= 11;//BAUD_E |
其中的常用波特率配置见表。
波特率(bps) | UxBAUD.BAUD_M | UxGCR_BAUD_E | 误差(%) |
---|---|---|---|
2400 | 59 | 6 | 0.14 |
4800 | 59 | 7 | 0.14 |
9600 | 59 | 8 | 0.14 |
14400 | 216 | 8 | 0.03 |
19200 | 59 | 9 | 0.14 |
28800 | 216 | 9 | 0.03 |
38400 | 59 | 10 | 0.14 |
57600 | 216 | 10 | 0.03 |
76800 | 59 | 11 | 0.14 |
115200 | 216 | 11 | 0.03 |
230400 | 216 | 12 | 0.03 |
(4)配置中断相关寄存器,代码如下:
1 | UTX0IF = 0;// 清零UART0发送中断标志位 |
(5)启用串口0的数据接收功能,代码如下:
1 | U0CSR |= 0x40;//启用数据接收功能 |
4.4 写串口数据收发的实现
打开本实验代码中的uart0.c文件,可以找到main函数,代码如下:
1 | //2. 51单片机入门/4. 串口通信实验/Workspace/code/uart/uart0.c |
4.4.1 setSystemClk32MHZ函数
在默认情况下,如前面章节所述CC2530的时钟频率为16MHz。开发者可以使用32MHz的外部晶振作为系统的时钟源,让CC2530的时钟频率提升至32MHz,从而提升CC2530的处理速度。配置步骤如下:
(1)通过CLKCONCMD配置外部的32MHz晶振作为系统时钟源。
(2)等待时钟源稳定。
(3)通过CLKCONCMD设置系统时钟频率为32MHz。
对应的配置代码如下:
1 | /** @brief 设置系统时钟为32MHz |
4.4.2 串口0的初始化
通过以上分析,串口0初始化函数initUart0的定义代码如下:
1 | /* |
4.4.3 串口0的数据接收
在初始化串口0后,CC2530从串口0中接收到数据后便会产生中断。开发者只需要在对应的中断处理函数中处理接收到的数据即可,代码如下:
1 |
|
4.4.4 串口0的数据发送
可以使用串口0发送数据给上位机(例如串口助手),发送一个字节的步骤如下:
(1) 把数据存放到串口0数据缓存寄存器U0DBUF中,U0DBUF中的数据会自动通过串口0发送出去。
(2)等待发送完成,数据发送完成后中断标志位被置为1。
(3)清零这个中断标志位。
在前面的串口数据接收中断处理函数中调用了uart0Send,uart0Send是由笔者编写的一个串口0数据发送函数,其函数定义代码如下:
1 | /** |
4.5 调试仿真
可以运行本实验代码以观察运行结果,操作步骤如下:
(1)编译链接本实验代码后,把程序烧录到ZigBee开发板中。
(2)打开友善串口调试助手,并且使用Micro USB线把开发板连接到电脑。按如图所示设置波特率、数据位、校验位、停止位和流控,以及发送/接收的字符编码方式,然后点击“启动”按钮。
(3)在图所示输入框中输入字符串并点击发送,可以看到从串口助手发送给开发板的数据又会从开发板发送回来。
四 代码
1 | //******************************************************************** |
六 串口数据控制小灯
完成了各引脚的基本配置(PxDIR、PxSEL)和中断的基本配置(四个)后,我们通过外部中断(Key)控制了小灯点亮。
下一步将继续就串口通信的部分进行学习和练习。
七 文献及资料整理
「资料整理」
·Torch目录