一次小模块的使用过程-LC12S无线模块介绍

前言:

最近帮人做了个小设备,使用了无线模块、触摸芯片,主要功能就是把触摸按键的信号无线传到控制继电器输出,MCU是STM8系列的芯片,其中使用过程中调试无线模块LC21S觉得挺好用的,就写了这篇文章。

作者:良知犹存

转载授权以及围观:欢迎添加微信公众号:羽林君

模块介绍:

LC12S 采用最新 2.4G SOC 技术,特点是免开发,视距 120 米,收发一体无需切换,串口透明传

输,提供通信协议,可迅速调试成功。用户只要了解串口通信,无需复杂的无线通讯知识,就能完成无

线通信产品的开发。没有数据包大小限制,延时短,半双工通讯,抗干扰能力强。

● 2.4GHz ISM 频段,使用无须申请

● 最大输出功率 12dBm

● 接收灵敏度-95dBm

● 发射工作电流 40mA@12dBm

● 接收工作电流 24mA

● 睡眠电流 3.5uA

● 标准 TTL 电平 UART 串口

● 工作频率可设置,多个模块频分复用,互不干扰

● 通讯协议转换及射频收发切换自动完成,用户无须干预,简单易用

● 通讯速率 0.6kbps -38.4kbps,用户可通过 AT 指令配置

引脚介绍:

引脚引脚名称引脚功能描述

1VCC电源电源(接 2.2~3.6V)典型 3.3V

2RXT模块数据输出(TTL 电平)串口通信数据接收

3TXD模块数据输入(TTL 电平)串口通信数据发送

4SET设置位配置参数使能(低电平使能参数配置,高电平进入透传模式,其中悬空为高电平)

5CS休眠引脚接低电平时工作,高电平进入休眠模式,其中悬空为高电平

6GND电源接地

基本配置:

设置模式:

一旦进入设置状态,SET 引脚配置必须是低电平,CS 引脚必须接低电平,且串口设置必须是数据位

8,波特率 9600,校验位 N,停止位 1,空中速率 1Mbps。因为初始化默认设置就是如此,如果后续你设置了自己的波特率,这个时候你需要把串口设置按照你修改后的配置来设置。

透传模式:

上电后,当 CS引脚接低电,进入工作模式,SET 脚是设置参数标志位,这个时候我们可以进行悬空或者拉高处理,让模块进入透传数据模式。

设置模式数据的协议格式:

在官方的手册里面有关于协议内容的说明,其中有一些数据是保留位,默认发0x00就可以。

如图所示,我们可以看到数据长度是18个byte,其中包括设备ID(Self ID)、组网ID(Net ID )、发射功率(RF Power)、通讯波特率设置(Baud 1Byte)、无线通讯通道设置(RF CHN)、设置时的通讯数据长度(Lenght 1Byte)、累加校验位(CheckSum);其中设置时的通讯数据长度是固定的18byte所以此处默认为0x12。

其他部分的设置参数,在手册中各有体现,其中组网ID需要按照自己定义的ID区间进行设置,因为这个唯一性会影响到你的模块组网情况。

其余的设置我设置参数我就不进行截图表示了,大家可以看一下相应的手册。

测试设置发送数据:

0xaa+0x5a+模块 ID+组网 ID(ID 必须相同)+0x00+RF 发射功率+0x00+串口速率

+0x00+RF 信道选择+0x00+0x00+0x12(字节长度)+0x00+和校验字节

注意:和校验字节=所有参数累加的字节

发送:

AA 5A 22 33 11 22 00 01 00 04 00 64 00 00 00 12 00 07

--->

参考后面的数据表格,以上配置参数设置无线模块为:

RF 发射功率:10dbm

串口速率:9600bps

RF 信道:100

模块 ID:0x2233

组网 ID:0x1122

和校验字节:07

接收: 设置完成后模块会返回相应数据

AA 5B 47 00 11 22 00 01 00 04 00 64 00 00 00 12 00 FA

<---

串口调试助手的信息:

实际设备连接情况:

设置模式接线示意图:

透传模式接线示意图:

代码实现:

因为模式使用比较简单,初始化好设备串口外设,再把CS引脚和SET配置一下,就可以开始使用了,如果你只是简单测试,那你可能只需要使用默认设置,只是进行数据的透传,那你可以直接忽略这部分设置的代码部分,直接看nrf_send_normal_data()函数。

设置模式下的代码

定义一个设置协议的结构体:

typedef struct __attribute__((__packed__)){

u16 head;                 //

u16 self_id;                 //

u16 net_id;                 //

u8 nc1;               //

u8 rf_power;          //

u8 nc2;               //

u8 rf_baud;          //

u8 nc3;               //

u8 rf_chn;          //

u16 nc4;               //

u8 nc5;               //

u8 length;               //

u8 nc6;               //

}SetSend;

拉低SET引脚,进入设置模式:

u8 SetNrf(void)//

{

GPIO_ResetBits(SET_PORT, SET_PIN);

GPIO_ResetBits(CS_PORT, CS_PIN);

u8 *p1 = malloc(18);

memset(p1,0x00,18);

SetSend *p = (SetSend*)p1;

p->head= 0xaa5a;

p->self_id = 0x2233;

p->net_id = 0x1122;

p->rf_power = 0x00;

p->rf_baud = 0x04;

p->rf_chn = 0x64;

p->length = 0x12;

p1[sizeof(SetSend)] = CheckSum((u8*)p, sizeof(SetSend));

USART_Transmit_String( sizeof(SetSend)+1,p1);

#if DEBUG_DPRINT

u8 *str = malloc(20);

hex_str((u8*)p, sizeof(SetSend)+1, str);

USART_Transmit_String(20,str);

//printf("--->:%s\r\n", str);

free(str);

#endif

free(p1);

return1;

}

数据透传的函数,这个时候SET引脚拉高,这个函数部分是我自己写的一个简单的3byte的sta状态发送。

大家可以按照自己的实际使用情况进行修改。

void nrf_send_normal_data(u16 sta)

{

GPIO_SetBits(SET_PORT, SET_PIN);

u8 *p1 = malloc(3);

memset(p1,0x00,3);

memset(p1,0xAA,1);

memcpy(p1+1,&sta,2);

USART_Transmit_String(3,p1);

free(p1);

}

芯片初始化之后不能立即使用,需要等待几十ms才能正常工作,所以需要稍微等待一下。

串口接收解析部分,这部分代码就仁者见仁智者见智了,大家可以用很多种方法实现,我只是贴了一下我写的代码部分,仅供参考。其中NRF_RestTime()函数是在定时器中计时,用来区分不同的数据帧。

u8  USART_RX_BUF[USART_MAX_RECV_LEN];

u16 USART_RX_STA=0;

u8 NRF_RecvdData(void)

{

u8 ret = 0;

if((USART_RX_STA&(1<<15)) != 0)

ret = 1;

returnret;

}

u16 NRF_RcvLen(void)

{

return(USART_RX_STA & 0x7FFF);

}

u8* NRF_RcvBuff(void)

{

returnUSART_RX_BUF;

}

void NRF_ClsRecvd(void)

{

USART_RX_STA = 0;

}

typedef struct  __attribute__((__packed__))

{

u32stat:1;

u32 timOut  :1;

u32 cunt    :15;

u32 des     :15;

}TboxTimTypeDef;

TboxTimTypeDef gNRFTimeManage;

#define TON   (1)

#define TOFF  (0)

void TimerManageInit(TboxTimTypeDef *t,u8stat,u16 destim)

{

t->des  = destim;

t->stat=stat;

t->cunt = 0;

t->timOut = 0;

}

void NRF_RestTime(void)

{

if(gNRFTimeManage.stat == TON)

{

(gNRFTimeManage.cunt < gNRFTimeManage.des)?(gNRFTimeManage.cunt++):\

(TimerManageInit(&gNRFTimeManage,TOFF,0),USART_RX_STA |=1<<15);

}

}

void NRF_Irq(void)

{

u8 res;

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

{

res =USART_ReceiveData8(USART1);

#if 0

USART_SendData8(USART1,res);

#endif

if((USART_RX_STA & ~(1<<15))

{

TimerManageInit(&gNRFTimeManage,TON,5);

USART_RX_BUF[USART_RX_STA++]=res;

}else

{

USART_RX_STA|=1<<15;

}

}

USART_ClearITPendingBit(USART1,USART_IT_RXNE);

}

void Parse_NRF(void)

{

if(NRF_RcvLen()>2)

{

u16 len = NRF_RcvLen();

u8 *p = NRF_RcvBuff();

u8 pos = 0;

u16 *sta = (u16*)(p+1);

while(pos < len){

if(*p == 0xAA)

{

relay_ctrl(*sta);

p += 3;

pos +=3;

}

else{

p++;

pos++;

}

}

USART_RX_STA = 0;

}

}

设备展示

主机端:

从机端:

结语

这就是我分享的LC12S模块的使用,如果大家有更好的想法和需求,也欢迎大家分享交流哈。

—END—

推荐阅读

【1】C++的智能指针你了解吗?

【2】嵌入式底层开发的软件框架简述

【3】CPU中的程序是怎么运行起来的必读

【4】C++的匿名函数(lambda表达式)

【5】阶段性文章总结分析

本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容