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 往下数的个数
搜索和配置的时候需要进入配置模式
透明广播:上位机配置
image.png
写入配置参数:

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
透明广播:串口配置
image.png
基于模块的寄存器地址

使用的是默认的组号
信道设置 20
CMD 80
REG 04
LEN 07
image.png
04 4 115200 00 01 C2 00
image.png
05 1 00
image.png
06 2 02 9A
信道 20 功率 30dBm 空速 4.8k
0000 0010 100 11 010
image.png
07 2 00 01 透传
image.png
08 1 05 重传使能bit7 0 次数5
image.png
09 2 00 64 100 ms重传
image.png
0A 1 00
80 04 07 00 01 C2 00 00 02 9A 00 01 05 00 64 00
image.png
18 1 本地组号
19 1 本地地址
1A 1 目标组号
1B 1 目标地址
image.png
设置本地组号地址和目标组号地址
80 18 04 0A 0A 0A 0A

读取设备运行参数
00 04 1E
image.png

image.png
主从模式:主机从机地址不能一样
上位机调试:主机com16 主机目标组号、地址无需设置,从机的目标组号、地址为主机的组号地址
image.png
从机 com3 目标地址组号为主机
image.png
从机可以直接发送数据到主机,主机发送数据到从机时需要加上目标从机的组号地址【16 进制】,如果需要广播给所有从机在数据加上 16 进制 FFFF 即可
image.png

配置参数图
image.png
代码实现
串口配置透传模式后还能改变波特率实现透传通信
串口与波特率修改
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();
			}				
	}
}

运行截图记录
image.png
经典的一秒延时
image.png
做细节信息配置 REG 0x04 05 06 07 18 19 20 21
image.png
CMD 0x00 REG 0x18 LEN 4
image.png
透传时本地组号和目标组号
TX:00 18 04
RX:00 18 04 0A 0A 0A 0A
透传时模块串口波特率 串口参数 信道 功率 空速 工作模式
image.png

image.png
image.png
image.png
TX:00 04 04
RX:00 04 04 00 01 C2 00 00 02 9A 00 01
自动配置大致完成不实现拨码条信道参数
UM482模块
先看电器参数
image.png
1669254812928.jpg.jpg
模块自检不通过现象

posted @ 2023-02-08 18:42  Yang-blackSun  阅读(14)  评论(0编辑  收藏  举报  来源
1 3