600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Zigbee 无线串口通信模块( DL-22 )

Zigbee 无线串口通信模块( DL-22 )

时间:2019-08-27 07:34:07

相关推荐

Zigbee 无线串口通信模块( DL-22 )

文章目录

一、DL-22简介二、模块配置三、串口通信(透明传输)

一、DL-22简介

DL-22无线串口模块为串口转2.4G无线模块,可以通过无线将两个或者多个串口连接起来。串口发入模块的数据会被模块使用无线发出,收到无线数据的模块会将这个数据使用串口发出,在两个设备上使用模块就像将这两个设备用串口连接起来一样。

1. 主要特点

点对点传输带有确认,数据丢失率为0.00%。支持串口不间断发送。支持串口双向同时收发。最高可达3300字节每秒的传输速率。适应2.8V~3.5V。使用单个按键进行设置,可以修改模块的信道、波特率。按键可配置为多对多模式。

2. 模块实图

3. 模式说明

DL-22模块可以配置为点对点模式和广播模式使用。点对点模式分为A端和B端,A端串口收到的数据会被B端串口发出,反之亦然。此模式下同一频道只准许两个节点互相通信,通信可保证数据丢失率为0.00%。广播模式下,一个节点的串口收到的数据会从所有距离可及,且频道相同的节点收到,并从串口发出。在对模块进行配置时,可以将同一个信道的两个模块配置为点对点A端和点对点B端,以获得О数据丢失的功能;或者将多个模块全部配置为广播模式,以获得多对多通信的功能。除此之外的通信模式都是不可用的。

4. 产品参数

5. 原理图

二、模块配置

DL-22模块配置分5个步骤︰

进入设置模式 设置波特率 设置频道 设置主/从机 确认设置

第一步-进入设置模式

在模块断电的情况下按下按键不松手,然后给模块供电,模块的四个LED会不断循环闪烁,此时释放按键,LED循环闪烁会停止,即进入设置模式。

第二步-设置波特率

完成第一步后,模块会使用LED指示当前的波特率,短按按键可以切换波特率。点亮的LED和波特率的对应关系如下表:

第三步–设置频道

在设置波特率完成后,长按按键直到LED循环闪烁,释放按键后可进入频道设置阶段。

在此阶段,点亮的LED会快速闪烁,代表选中一个频道。短按按键可以切换到下一个频道。本模块提供16个频道,分别对应四个LED的16种状态(包括全部LED熄灭)。如果您只有两个模块,可以先将第-个模块的频道设置为任意状态,然后记下闪烁LED的位置,在设置第二个模块时将LED设置成和上一个相同即可。只要频道相同,波特率不同的两个模块也可以互相通信。

第四步–设置模式

在设置频道完成后,长按按键直到LED循环闪烁,可进入模式设置阶段。

在此阶段,点亮的LED会缓慢的闪烁。短按按键,LED会在三种模式之间切换。

第五步–确认设置

在模式设置完成后,长按按键直到LED循环闪烁,释放按键后所有LED常亮2秒钟,之后会进入正常工作模式,刚刚配置的内容即可保存并生效。如果不希望刚刚的设置生效,则可给模块断电。在确认设置前的任何阶段给模块断电,设置的信息都不会被保存。

三、串口通信(透明传输)

1. 串口初始化

void uart_init2(u32 bound){//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能USART2,GPIOA时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//使能USART2,GPIOA时钟//USART2_TX GPIOA.2GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.2//USART2_RX GPIOA.3初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.3 //USART2 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化VIC寄存器//USART 初始化设置USART_InitStructure.USART_BaudRate = bound;//串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//收发模式USART_Init(USART2, &USART_InitStructure); //初始化串口1USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断USART_Cmd(USART2, ENABLE);//使能串口1 }

2. 接受中断

将接收到的数据存入缓冲区

void USART2_IRQHandler(void)//串口1中断服务程序{u8 Res;if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾){Res =USART_ReceiveData(USART2);//读取接收到的数据if((USART2_RX_STA&0x8000)==0)//接收未完成{if(USART2_RX_STA&0x4000)//接收到了0x0d{if(Res!=0x0a)USART2_RX_STA=0;//接收错误,重新开始else USART2_RX_STA|=0x8000;//接收完成了 }else //还没收到0X0D{if(Res==0x0d)USART2_RX_STA|=0x4000;else{USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;USART2_RX_STA++;if(USART2_RX_STA>(USART2_REC_LEN-1))USART2_RX_STA=0;//接收数据错误,重新开始接收 } }} } }

3. 逻辑判断

如果接收到指定数据,led闪烁

if(USART2_RX_STA&0x8000){if(USART2_RX_BUF[0]=='1'){for(j=0;j<=10;j++){LED1=~LED1;delay_ms(100);}} else if(USART2_RX_BUF[0]=='2'){for(j=0;j<=10;j++){LED0=~LED0;delay_ms(100);}}memset(USART2_RX_BUF,0,sizeof(USART2_RX_BUF)); USART2_RX_STA=0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。