RTK 学习记录
RF A39-T400A30D1a开发使用记录
MD0 MD1 高电平 1 空接就行
0 0 配置模式 9600 波特率 配置模式下两脚 MD1 MD0 接地
1 0 一般工作模式
1 1 低功耗
透明广播
工作模式设置为透明传输
通信信道本地组号[目标组号] 本地地址[目标地址]
RSSI信号强度简介:
RSSI是一般用于说明无线信号强度的,英文是Received signal strength indication。从英文直译可以看出RSSI是指的是无线接收时的信号强度。它和无线模块的发送功率,射频前端的设计以及天线的增益有关,单位是功率的单位,一般用dBm来表示。信噪比(SNR)也是通过RSSI计算出来的,SNR = Signal/Noise Ratio,也就是信号和噪声的功率比
Reg
[词典]注册表文件; 面域(region); 登录档;
串口配置:
CMD[7] 7 6 5 4 3 2 1
REG 0x00 0x21
LEN 从开始REG 往下数的个数
搜索和配置的时候需要进入配置模式
透明广播:上位机配置
写入配置参数:
80 04 1E 00 01 C2 00 00 02 FA 00 01 05 03 E8 00 77 77 77 2E 61 73 68 69 6E 69 6E 67 2E 63 6F 6D 7C 7C 7C 7C 7C 05 40 00 23 00 00 00 3C 3C 00 0A 19 00 80 00 00 00 00 00 00 00 00 17 02
透明广播:串口配置
基于模块的寄存器地址
使用的是默认的组号
信道设置 20
CMD 80
REG 04
LEN 07
04 4 115200 00 01 C2 00
05 1 00
06 2 02 9A
信道 20 功率 30dBm 空速 4.8k
0000 0010 100 11 010
07 2 00 01 透传
08 1 05 重传使能bit7 0 次数5
09 2 00 64 100 ms重传
0A 1 00
80 04 07 00 01 C2 00 00 02 9A 00 01 05 00 64 00
18 1 本地组号
19 1 本地地址
1A 1 目标组号
1B 1 目标地址
设置本地组号地址和目标组号地址
80 18 04 0A 0A 0A 0A
读取设备运行参数
00 04 1E
主从模式:主机从机地址不能一样
上位机调试:主机com16 主机目标组号、地址无需设置,从机的目标组号、地址为主机的组号地址
从机 com3 目标地址组号为主机
从机可以直接发送数据到主机,主机发送数据到从机时需要加上目标从机的组号地址【16 进制】,如果需要广播给所有从机在数据加上 16 进制 FFFF 即可
配置参数图
代码实现
串口配置透传模式后还能改变波特率实现透传通信
串口与波特率修改
1.串口波特率修改 关键信息自动跳波特率 #M1 #M2
配置串口
需要实现波特率数据位停止位校验位空中速率发射功率工作模式通信信道
CMD 80
REG 04
LEN 04
DATA 00 01 C2 00 00 02 9A 00 01
设置本地组号地址和目标组号地址
80 04 04 00 01 C2 00 00 02 9A 00 01
80 18 04 0A 0A 0A 0A
上电的时候串口是9600 配置完了改为115200 然后进行透传
先串口1配置串口1 输出数据
COM1
COM2 P46P 47 RX TX 44 45 MD1 MD0
RF 先以BRT 9600 在UART 2 自动配置配置完后自动修改波特率再与UART1进行波特率为115200的透传
#include "config.h"
#include "STC32G_GPIO.h"
#include "STC32G_UART.h"
#include "STC32G_NVIC.h"
#include "STC32G_Delay.h"
#include "STC32G_Switch.h"
//定义初始化数组
u8 xdata RF_init_Parameter[] = {0x80,0x04,0x1E,0x00,0x01,0xC2,0x00,0x00,0x02,0x9A,0x00,0x01,0x05,0x03,0xE8,0x00,0x77,0x77,\
0x77,0x2E,0x61,0x73,0x68,0x69,0x6E,0x69,0x6E,0x67,0x2E,0x63,0x6F,0x6D,0x7C,0x7C,0x7C,0x7C,\
0x7C,0x05,0x40,0x00,0x23,0x00,0x00,0x00,0x3C,0x3C,0x00,0x0A,0x19,0x00,0x80,0x0A,0x0A,0x0A,\
0x0A,0x00,0x00,0x00,0x00,0x17,0x02};
//查询信息通道 地址
u8 xdata RF_check[] = {0x80,0x04,0x1E};
//80 04 01
/* MD0 MD1
0 0 配置模式 9600 波特率 配置模式下两脚 MD1 MD0 接地
1 0 一般工作模式
1 1 低功耗
*/
bit RF_config_flag = 0; //RF配置模式标志
sbit RF_M0 = P1^4; //M0和 M1为RF的设置引脚
sbit RF_M1 = P1^5;
sbit AUX = P1^0;
u8 RF_cmd_buf[10];
/******************* IO配置函数 *******************/
void GPIO_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //结构定义
GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7
GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P3,&GPIO_InitStructure); //初始化
GPIO_InitStructure.Pin = GPIO_Pin_2 | GPIO_Pin_3; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7
GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P5,&GPIO_InitStructure); //初始化
GPIO_InitStructure.Pin = GPIO_Pin_4 | GPIO_Pin_5; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7
GPIO_InitStructure.Mode = GPIO_OUT_PP; //指定IO的输入或输出方式
GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //初始化
GPIO_InitStructure.Pin = GPIO_Pin_0; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7
GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的输入或输出方式
GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //初始化
}
/*************** 串口初始化函数 *****************/
void UART_config(void)
{
COMx_InitDefine COMx_InitStructure; //结构定义
COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //选择波特率发生器, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
COMx_InitStructure.UART_BaudRate = 9600ul; //波特率, 110 ~ 115200
COMx_InitStructure.UART_RxEnable = ENABLE; //接收允许, ENABLE或DISABLE
UART_Configuration(UART4, &COMx_InitStructure); //初始化串口 UART1,UART2,UART3,UART4
NVIC_UART4_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
//UART1_SW(UART1_SW_P30_P31); //UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44
UART4_SW(UART4_SW_P52_P53);
}
void Config_init(void)
{
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXSFR(); //扩展SFR(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
GPIO_config();
UART_config();
EA = 1;//总中断打开
}
//串口4波特率重新配置
void uart4_reconfig(void)
{
COMx_InitDefine COMx_InitStructure; //结构定义
EA = 0;
//串口使能 先把串口关了然后配置uart4 波特率
COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //选择波特率发生器, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
COMx_InitStructure.UART_BaudRate = 115200ul; //波特率, 110 ~ 115200
COMx_InitStructure.UART_RxEnable = ENABLE; //接收允许, ENABLE或DISABLE
UART_Configuration(UART4, &COMx_InitStructure); //初始化串口 UART1,UART2,UART3,UART4
NVIC_UART4_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
COMx_InitStructure.UART_BaudRate = 115200ul; //波特率, 一般 110 ~ 115200
COMx_InitStructure.UART_RxEnable = ENABLE; //接收允许, ENABLE或DISABLE
COMx_InitStructure.BaudRateDouble = DISABLE; //波特率加倍, ENABLE或DISABLE
UART_Configuration(UART1, &COMx_InitStructure); //初始化串口1 UART1,UART2,UART3,UART4
NVIC_UART1_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
UART4_SW(UART4_SW_P52_P53);
UART1_SW(UART1_SW_P30_P31);
EA =1;
RF_config_flag = 1;
PrintString1("\r\nRF_UART Transparent Transmission Configuration succeeded\r\n");
RF_M0 = 1; //M0和 M1为RF的设置引脚
RF_M1 = 0;
delay_ms(1000);
}
//RF 初始化配置
void RF_init_config()
{
u8 i;
RF_M0 = 0; //M0和 M1为RF的设置引脚
RF_M1 = 0; //进入配置模式
delay_ms(1000);//配置引脚后RF模块可能会反应不过来延时1秒,给硬件一点时间^v^!!! 11.18
if(AUX == 1){
CLR_TI4();//清除串口数据 不然可能会第一个数据莫名奇妙的被覆盖
for(i=0;i<61;i++)
{
TX4_write2buff(RF_init_Parameter[i]); //配置
}
uart4_reconfig();
}
if(AUX == 0)
{
CLR_TI4();//清除串口数据 不然可能会第一个数据莫名奇妙的被覆盖
for(i=0;i<3;i++)
{
TX4_write2buff(RF_check_Parameter[i]);
}
}
}
//设置RF工作模式并且与串口1进行透传通信
void RF_UART1(void)
{
u8 i;
if(COM1.RX_TimeOut > 0) //超时计数
{
if(--COM1.RX_TimeOut == 0)
{
if(COM1.RX_Cnt > 0)
{
for(i=0; i<COM1.RX_Cnt; i++) TX4_write2buff(RX1_Buffer[i]); //收到的数据原样返回
}
COM1.RX_Cnt = 0;
}
}
if(COM4.RX_TimeOut > 0) //超时计数
{
if(--COM4.RX_TimeOut == 0)
{
if(COM4.RX_Cnt > 0)
{
for(i=0; i<COM4.RX_Cnt; i++) TX1_write2buff(RX4_Buffer[i]); //串口1 输出 RF的数据
}
COM4.RX_Cnt = 0;
}
}
}
/***********************************************/
void main(void)
{
Config_init();
delay_ms(20000);//调试上电20秒后我再
while (1)
{
if(RF_config_flag == 1)
{
RF_UART1();
}
if(RF_config_flag == 0)
{
RF_init_config();
}
}
}
运行截图记录
经典的一秒延时
做细节信息配置 REG 0x04 05 06 07 18 19 20 21
CMD 0x00 REG 0x18 LEN 4
透传时本地组号和目标组号
TX:00 18 04
RX:00 18 04 0A 0A 0A 0A
透传时模块串口波特率 串口参数 信道 功率 空速 工作模式
TX:00 04 04
RX:00 04 04 00 01 C2 00 00 02 9A 00 01
自动配置大致完成不实现拨码条信道参数
UM482模块
先看电器参数
模块自检不通过现象