硬件平台: STM32F103C8T6
软件平台:keil MDK
#define LEARN_KEY GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3) //学习按键
#define SEND_KEY GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_4) //发送按键
#define MODE_KEY GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) //模式按键
#define RFin GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) //高频433接收
串口协议:
#define DEBUG_USART_BAUDRATE 9600
#define ONOFF_SCAN Set_Buff[0] //ON/OFF,Scan模式
#define PATTREN_BIT Set_Buff[1] //Pattren 32/16bit模式 0 16bit 1 32bit
#define PATTERN1 Set_Buff[2] //pattern的值 R6
#define PATTERN2 Set_Buff[3] //pattern的值 R5
#define LFBIT_NxRC Set_Buff[4] //编码速率
#define LFSENDMODE Set_Buff[5] //LF发送模式 0 载波+正文 1 载波+前导+模式+正文
#define LF_ENABLE Set_Buff[6] //使能低频发送 1发送 非1停止
#define LFWOKEMODE Set_Buff[7] //LF发射方式 0手动 1自动
#define SEND_RSSI Set_Buff[8] //LF发射功率强度 取值0 - 7
#define INTERVAL1 Set_Buff[9] //发送周期
#define INTERVAL2 Set_Buff[10] //发送周期(INTERVAL1 * 256 + INTERVAL2)/10 ms
#define DELAY1 Set_Buff[11] //配置完成延时启动时间
#define DELAY2 Set_Buff[12] //配置完成延时启动时间 DELAY1 * 256 + DELAY2 ms
#define DEVICE_ID1 Set_Buff[13] //设备¸ID1
#define DEVICE_ID2 Set_Buff[14] //设备¸ID2
#define ACTIVE_NUM Set_Buff[15] //激活ID的字节数 (DATA/正文)
#define ACTIVE_ID1 Set_Buff[16] //激活ID1
#define ACTIVE_ID2 Set_Buff[17] //激活ID2
#define ACTIVE_ID3 Set_Buff[18] //激活ID3
#define ACTIVE_ID4 Set_Buff[19] //激活ID4
#define ACTIVE_ID5 Set_Buff[20] //激活ID5
#define ACTIVE_ID6 Set_Buff[21] //激活ID6
#define ACTIVE_ID7 Set_Buff[22] //激活ID7
#define ACTIVE_ID8 Set_Buff[23] //激活ID8
#define ACTIVE_ID9 Set_Buff[24] //激活ID9
心跳包: CC 00 01 01 C3 3A 01 01 4F 4B 05 89 EE
Heartbeat_Buff[0] = 0xCC; //心跳数据
Heartbeat_Buff[1] = DEVICE_ID1;
Heartbeat_Buff[2] = DEVICE_ID2;
Heartbeat_Buff[3] = LF_ENABLE;
Heartbeat_Buff[4] = PATTERN1;
Heartbeat_Buff[5] = PATTERN2;
Heartbeat_Buff[6] = ACTIVE_NUM;
Heartbeat_Buff[7] = ACTIVE_ID1;
Heartbeat_Buff[8] = ACTIVE_ID2;
Heartbeat_Buff[9] = ACTIVE_ID3;
Heartbeat_Buff[10] = ACTIVE_ID4;
Heartbeat_Buff[11] = ACTIVE_ID5;
Heartbeat_Buff[12] = ACTIVE_ID6;
Heartbeat_Buff[13] = ACTIVE_ID7;
Heartbeat_Buff[14] = ACTIVE_ID8;
Heartbeat_Buff[15] = ACTIVE_ID9;
Heartbeat_Buff[7 + ACTIVE_NUM] = 0x4F;
Heartbeat_Buff[8 + ACTIVE_NUM] = 0x4B;
crc = GetCRC16(Heartbeat_Buff, ACTIVE_NUM + 9); //计算CRC数据值
Heartbeat_Buff[9 + ACTIVE_NUM] = crc & 0xFF;
Heartbeat_Buff[10 + ACTIVE_NUM] = crc >> 8;
Heartbeat_Buff[11 + ACTIVE_NUM] = 0xEE;
心跳包: CC 00 01 01 C3 3A 01 01 4F 4B 05 89 EE
0xCC:心跳数据 | 设备ID1 DEVICE_ID1 | 设备ID2 DEVICE_ID2 | 使能低频发送 1:发送 非 1:停止 LF_ENABLE | Pattren的值 R6 | Pattren的值 R5 | 激活的ID字节数 ACTIVE_NUM | 激活ID1 ACTIVE_ID1 | 0x4F | 0x4B | CRC低8位 | CRC高8位 | 0xEE |
Heartbeat_Buff[0] | Heartbeat_Buff[1] | Heartbeat_Buff[2] | Heartbeat_Buff[3] | Heartbeat_Buff[4] | Heartbeat_Buff[5] | Heartbeat_Buff[6] | Heartbeat_Buff[7] | Heartbeat_Buff[16] | Heartbeat_Buff[17] | Heartbeat_Buff[18] | Heartbeat_Buff[19] | Heartbeat_Buff[20] |
CC | 00 | 01 | 01 | C3 | 3A | 01 | 01 | 4F | 4B | 05 | 89 | EE |
设置成功数据帧: 13字节
Uart1Write(buf, ACTIVE_NUM + 12);
CC 00 01 01 C3 3A 01 01 4F 4B 05 89 EE
T读取帧:
DD 00 01 3A 20 EE
R读取帧,回复设置成功数据帧:
AA 00 01 C3 3A 0C 01 01 01 07 02 00 05 00 00 01 01 01 FD 87 EE
执行:
AA 00 01 C3 3A 0C 01 01 01 07 02 00 05 00 00 01 01 01 FD 87 EE
0xAA: 设置帧 0xDD: 读取帧 0xCC:心跳数据 | ON/OFF,Scan模式 | Pattren 32/16bit模式 0-16bit 1-32bit | Pattren的值 R6 | Pattren的值 R5 | 编码速率 | LF发送模式 0-载波+正文 1-载波+前导+模式+正文 | 使能低频发送 1:发送 非 1:停止 | LF发射方式 0: 手动 1:自动 | LF发射功率强度 取值0-7 | 发送周期 | 发送周期 (INTERVAL1 * 256 + INTERVAL2)/10 ms | 配置完成延时启动 | 配置完成延时启动 | 设备ID1 | 设备ID2 | 激活的ID字节数 | 激活ID1 | CRC_H | CRC_L | 0xEE |
ONOFF_SCAN | PATTREN_BIT | PATTERN1 | PATTERN2 | LFBIT_NxRC | LFSENDMODE | LF_ENABLE | LFWOKEMODE | SEND_RSSI | INTERVAL1 | INTERVAL2 | DELAY1 | DELAY2 | DEVICE_ID1 | DEVICE_ID2 | ACTIVE_NUM | ACTIVE_ID1 | ||||
AA | 00 | 01 | C3 | 3A | 0C | 01 | 01 | 01 | 04 | 02 | 00 | 05 | 00 | 00 | 01 | 01 | 01 | 0D | 93 | EE |
高频数据:DD 04 DF F3 70 01 B1 CC EE
LF_Mode = 0; //自动模式
if(LF_Mode) Mode_LED_ON; //手动模式,LED亮
else Mode_LED_OFF; //自动模式,LED灭
低频125K 接收数据:
1F 1B 1F
LF_ENABLE,ACTIVE_NUM 及SEND_RSSI 在 AT24C02中定死,为初次设定固定值。
if((LF_ENABLE <= 1)&&(ACTIVE_NUM <= 9)&&(SEND_RSSI <= 7))
如果符合上述调节,判定为数据合格。
判定合格后,设置 数据合格标志位:Set_flag =1.
若数据不合格,设置 数据合格标志位:Set_flag =0.
Delay_Tim,
void Uart1RxMonitor(uint8_t ms) //串口接收监控函数, 在定时器中,每1ms进入一次。
cmdArrived = 1; //串口一帧数据接收完毕后标志位
在cmdArrived = 1 后会将 Delay_Tim赋值, 让125K低频发送 延时 Delay_Tim。 Delay_Tim = 0初值为0.
Delay_Tim = (DELAY1 >> 4)* 1000 + (DELAY1 & 0x0F) * 100 + (DELAY2 >> 4) * 10 + (DELAY2 & 0x0F); //低频延迟发送时间
DELAY1=05;
DELAY2=00;
DELAY1,DELAY2,在初始配置中配置好,保存于AT24C02中,属于固定值。
LF_Send_flag : 手动发送标志位。
if((LF_Mode)||(LFWOKEMODE == 0)) LF_Send_flag = 1; //LF_Send_flag仅在此处置1,默认值为0.
LF_Mode = 0; / / LF发射模式 0: 自动 1:手动
LFWOKEMODE / / LF发射方式 0: 手动 1:自动
上位机软件配置:
点击执行发送: 上位机软件----> MCU (配置参数)
发送:AA 00 01 C3 3A 0C 01 01 01 07 02 00 05 00 00 01 01 01 FD 87 EE
(上述数据为截图所示配置数据,默认配置),MCU接收到后配置上述参数,然后参数保存至FLASH。
点击读取,则读取flash内保存的参数:上位机软件----> MCU (读取MCU配置参数)
发送:DD 00 01 3A 20 EE
MCU会回复数据:AA 00 01 C3 3A 0C 01 01 01 07 02 00 05 00 00 01 01 01 FD 87 EE
发射端 7.4v供电时
配置LF发送强度为7 :AA 00 01 C3 3A 0C 01 01 01 07 02 00 05 00 00 01 01 01 FD 87 EE
(回复:BB 00 01 01 C3 3A 01 01 4F 4B F4 3A EE)
感应距离最大2.5mm , 在2.4m,2.5m左右可以感应到数据。在2.8mm距离感应不到数据。
配置LF发送强度为6 :AA 00 01 C3 3A 0C 01 01 01 06 02 00 05 00 00 01 01 01 6D 8A EE
(回复:BB 00 01 01 C3 3A 01 01 4F 4B F4 3A EE)
感应距离最大2.4m可以感应到数据。超过1.5m距离感应不到数据。
配置LF发送强度为5 :AA 00 01 C3 3A 0C 01 01 01 05 02 00 05 00 00 01 01 01 9D 9E EE
(回复:BB 00 01 01 C3 3A 01 01 4F 4B F4 3A EE)
感应距离最大2.3m可以感应到数据。超过1.5m距离感应不到数据。
配置LF发送强度为4 :AA 00 01 C3 3A 0C 01 01 01 04 02 00 05 00 00 01 01 01 0D 93 EE
(回复:BB 00 01 01 C3 3A 01 01 4F 4B F4 3A EE)
感应距离最大2.1 m可以感应到数据。超过1.5m距离感应不到数据。
配置LF发送强度为3 :AA 00 01 C3 3A 0C 01 01 01 03 02 00 05 00 00 01 01 01 3D B5 EE
(回复:BB 00 01 01 C3 3A 01 01 4F 4B F4 3A EE )
感应距离最大1.9m可以感应到数据。超过1.5m距离感应不到数据。
配置LF发送强度为2 :AA 00 01 C3 3A 0C 01 01 01 02 02 00 05 00 00 01 01 01 AD B8 EE
(回复:BB 00 01 01 C3 3A 01 01 4F 4B F4 3A EE)
感应距离最大1.8m可以感应到数据。超过1.5m距离感应不到数据。
配置LF发送强度为1 :AA 00 01 C3 3A 0C 01 01 01 01 02 00 05 00 00 01 01 01 5D AC EE
(回复:BB 00 01 01 C3 3A 01 01 4F 4B F4 3A EE)
感应距离最大1.4m可以感应到数据。超过1.5m距离感应不到数据。
配置LF发送强度为0 :AA 00 01 C3 3A 0C 01 01 01 00 02 00 05 00 00 01 01 01 CD A1 EE
(回复:BB 00 01 01 C3 3A 01 01 4F 4B F4 3A EE)
感应距离最大0.9m可以感应到数据。超过1.5m距离感应不到数据。
8.43V供电时: 最大感应距离
强度7-------------- 2.8m
强度6-------------- 2.7m
强度5-------------- 2.3m
强度4-------------- 2.2m
强度3--------------2 m
强度2-------------- 1.9m
强度1-------------- 1.5m
强度0-------------- 1m
以上距离为目测估值。