ZStack-CC2530-2.5.1a开发(三)串口收发通信(自定义串口回调函数)

ZStack版本:ZStack-CC2530-2.5.1a
下载和调试器:SmartRF04EB
IDE开发软件:IAR Embedded Workbench IDE - 8051 10.20.1
开发平台:基于TI-CC2530的任意厂家的
工程模板:ZStack-CC2530-2.5.1a\Projects\zstack\Samples\GenericApp
1、要实现的功能
a、开机后,自动从串口发送一行“hello world!”字符串给上位机。
b、从上位机给CC2530串口发送信息,CC2530收到信息 后,回传给上位机。
2、CC2530 串口简介
CC2530有两个USB转串口,分别是USART0和USART1。它们可以分别运行在异步UART模式或者同步SPI模式。两个USART具体同样的功能,可以设置在单独的I/O引脚:
ZStack-CC2530-2.5.1a开发(三)串口收发通信(自定义串口回调函数)_第1张图片
ZStack-CC2530-2.5.1a开发(三)串口收发通信(自定义串口回调函数)_第2张图片
ZStack-CC2530-2.5.1a开发(三)串口收发通信(自定义串口回调函数)_第3张图片
根据上面的外设I/O引脚映射可知:

UART0对应的外部设置IO引脚关系为:位置1:P0_2----RX P0_3----TX 位置2:P1_4----RX P1_5----TX

UART1对应的外部设置IO引脚关系为:位置1:P0_5----RX P0_4----TX 位置2:P1_7----RX P1_6----TX

UART0的位置1和2使用PERCFG的第0位决定,UART1的位置1和2使用PERCFG的第1位决定。

3、串口收发实验
此工程在ZStack-CC2530-2.5.1a开发(一)工程建立的基础上进行,并将工程配置为协调器模式。其他模式下方法相同。

 3.1、串口初始化
     在Coordination文件的用户任务初始函数中添加串口初始化相关语句,代码如下:
void GenericApp_Init( uint8 task_id )
{
  halUARTCfg_t  uartConfig;
 ................................
uartConfig.configured = TRUE;
uartConfig.baudRate   = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.callBackFunc = rxCB;
HalUARTOpen(0,&uartConfig);
HalUARTWrite(0,"hello world!\n\r",strlen("hello world!\n\r"));
}

省略号为原来的代码,其余为添加的串口代码。
3.2 串口回调函数的实现。
串口回调函数是在串口接收到数据时使用,用来获取串口接收的数据,代码如下:

static void rxCB(uint8 port,uint8 event)
{
	uint8  ch;  
	uint8  rxBuffer[128];  
	uint8 len = 0;  
	while (Hal_UART_RxBufLen(port))  
	{      
		HalUARTRead (port, &ch, 1);
		rxBuffer[len]  = ch;      
		len++;  
	}  
	if(len)  
	{      
		HalUARTWrite(0,rxBuffer,len); 
		len = 0;
	}
}

添加串口回调函数的声明。
在Coordination.c文件的本地函数声明处,声明串口回调函数,代码如下:

/*********************************************************************
 * LOCAL FUNCTIONS
 */
static void GenericApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg );
static void GenericApp_HandleKeys( byte shift, byte keys );
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pckt );
static void GenericApp_SendTheMessage( void );
static void rxCB(uint8 port,uint8 event);//by add

3.3 添加字符串头文件
由于串口中使用了字符串函数,所以在Coordination.c的头文件声明中,添加相关的字符串头文件

#include "string.h"

4、编译下载测试
ZStack-CC2530-2.5.1a开发(三)串口收发通信(自定义串口回调函数)_第4张图片
测试成功。
5、更改UART0位置,进行测试
ZStack-CC2530-2.5.1a协议栈串口0默认位于位置1:P0_2----RX P0_3----TX,
如果你的板子串口0位于位置2:P1_4----RX P1_5----TX,将串口位置由位置1更改为位置2的方法如下:
打开_hal_uart_dma.c文件,在static void HalUARTInitDMA(void)函数体中,将
PERCFG &= ~HAL_UART_PERCFG_BIT; // Set UART0 I/O to Alt. 1 location on P0.注释掉,
添加PERCFG |= HAL_UART_PERCFG_BIT; // Set UART0 I/O to Alt. 2 location on P1.
将PxSEL |= HAL_UART_Px_RX_TX;注销,添加P1SEL |= 0x30; // Enable Tx and Rx on P1.两条语句。

#if (HAL_UART_DMA == 1)
  //PERCFG &= ~HAL_UART_PERCFG_BIT;    // Set UART0 I/O to Alt. 1 location on P0.
  PERCFG |= HAL_UART_PERCFG_BIT;    // Set UART0 I/O to Alt. 2 location on P1
#else
........
//PxSEL  |= HAL_UART_Px_RX_TX;
P1SEL  |= 0x30;       // Enable Tx and Rx on P1.

更改完成后,UART0的位置就被放到了P1口,编译下载测试即可。

你可能感兴趣的:(Zigbee)