首先我们需要对zigbee进行编程:
软件IAR
#include <ioCC2530.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char
//函数声明
void Delay(uint);
void initUARTSEND(void);
void UartTX_Send_String(char *Data,int len);
char Txdata[50]="1\r\n";
char kaideng[30]="2\r\n";
/****************************************************************
延时函数
****************************************************************/
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++);
}
/****************************************************************
串口初始化函数
****************************************************************/
void initUARTSEND(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0_2,P0_3,P0_4,P0_5用作串口
P2DIR &= ~0XC0; //P0优先作为UART0
U0CSR |= 0x80; //UART方式
U0GCR |= 11;
U0BAUD |= 216; //波特率设为115200
UTX0IF = 0; //UART0 TX中断标志初始置位0
}
/****************************************************************
串口发送字符串函数
****************************************************************/
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
/****************************************************************
主函数
****************************************************************/
void main(void)
{
uchar i;
initUARTSEND();
UartTX_Send_String(Txdata,25);
UartTX_Send_String(kaideng,25);
for(i=0;i<30;i++)Txdata[i]=' ';
strcpy(Txdata,"1\r\n"); //将UART0 TX test赋给Txdata;
for(i=0;i<30;i++)kaideng[i]=' ';
strcpy(kaideng,"2\r\n"); //将UART0 TX test赋给Txdata;
while(1)
{
UartTX_Send_String(Txdata,strlen(Txdata)); //串口发送数据
Delay(50000);
Delay(50000);//延时
UartTX_Send_String(kaideng,strlen(kaideng)); //串口发送数据
Delay(50000);
Delay(50000);
}
}
该代码执行的是让P0_2与P0_3作为串口UART发送消息,发送的消息为1与2,来回发送。
然后再STM32编程,
#include “led.h”
#include “delay.h”
#include “sys.h”
#include “usart.h”
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
uart_init(115200); //串口初始化·· 为115200
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
if(USART_RX_STA&0x8000)
{
if(USART_RX_BUF[0] ==’1′)
{
GPIO_SetBits(GPIOA,GPIO_Pin_8); //LED0输出低
printf(“正在关灯:\r\n”);
printf(“\r\n\r\n”);//插入换行
USART_RX_STA=0;
}
if(USART_RX_BUF[0] ==’2′)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8); //开灯
printf(“正在开灯:\r\n”);
printf(“\r\n\r\n”);//插入换行
USART_RX_STA=0;
}
}
}
}
写入当收到消息为1时,开灯,消息为2时,关灯
此时注意。需要进行换行,\r\n 在ZIGBEE那边的发送字符串也需要加入换行代码,之前没有加,导致了出错。
然后接线,PA9接P0_2, PA10接P0_3
5V接5V,RND接RND;