zigbee与Stm32串口通信(通过串口通信来控制开关灯)

首先我们需要对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时,关灯

扫描二维码关注公众号,回复: 14828492 查看本文章

此时注意。需要进行换行,\r\n 在ZIGBEE那边的发送字符串也需要加入换行代码,之前没有加,导致了出错。

然后接线,PA9接P0_2,    PA10接P0_3

5V接5V,RND接RND;

猜你喜欢

转载自blog.csdn.net/a1060916181/article/details/127853249