这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【星闪模组开发板WS8204SLE&BLEModule试用】2、AT透传控制目标

共2条 1/1 1 跳转至

【星闪模组开发板WS8204SLE&BLEModule试用】2、AT透传控制目标MCU

助工
2025-03-04 14:38:04     打赏

本文利用WS8204出厂AT固件实现数据透传,达到控制目标MCU的目的。

一、总体框图

使用2个WS8204,一个做为主机连接PC机,另一个做为从机并连接目标MCU。

1、PC机通过UART发送AT指令到WS8204主机,WS8204主机通过SLE发送给WS8204从机;

2、WS8204从机收到指令进行处理,并通过UART发送给目标单片机AT32L021处理。MCU对于透传数据进行解析,并判断是否自定义命令,按照命令点灯或改变LCD背景颜色。

5.png

二、用到的几个AT指令

1、AT+HELP\r\n

显示帮助内容,列出所有AT指令

AT+ECHO         | -- | GET| SET| -- |  The command echo enables or disable.
AT+GMR          | -- | GET| -- |HELP|  Get Device Information
AT+HELP         |  DO| -- | SET| -- |  Gets the list of AT
AT+RESTORE      |  DO| -- | -- | -- |  Restore factory Settings and restart
AT+RST          |  DO| -- | -- | -- |  Restart module
AT+SLEEP        |  DO| -- | -- | -- |  Into sleep.
AT+UART         | -- | GET| SET|HELP|  Gets or sets UART parameters
AT+SANNOU       | -- | GET| SET|HELP|  Set or Get Sle announce Enable.
AT+SANNOUPARA   | -- | GET| SET|HELP|  Set or Get Sle announce intv.
AT+SCONPARA     | -- | GET| SET|HELP|  Set or Get Sle Connect parameters.
AT+SDISC        |  DO| -- | SET| -- |  Disconnect Sle
AT+SFMAC        | -- | GET| SET|HELP|  Set or Get SLE SCAN Rssi Filter.
AT+SFNAME       | -- | GET| SET|HELP|  Set or Get Sle scan name filter.
AT+SFRSSI       | -- | GET| SET|HELP|  Set or Get Sle scan rssi filter.
AT+SMAC         | -- | GET| -- | -- |  Set or Get Sle MAC.
AT+SMCONPARA    | -- | -- | SET|HELP|  Sets the connection parameter for the specified link.
AT+SMTU         | -- | GET| SET|HELP|  Set or Get Sle MTU.
AT+SMUX         | -- | GET| SET|HELP|  Set or Get Sle Maximum number of connections.
AT+SNAME        | -- | GET| SET|HELP|  Set or Get Sle Name.
AT+SPMAC        | -- | GET| SET|HELP|  Set or Get Peer MAC.
AT+SRFPWR       | -- | GET| SET|HELP|  Set or Get Sle Maximum number of connections.
AT+SROLE        | -- | GET| SET|HELP|  Set or Get Sle role.
AT+SSCAN        | -- | GET| SET|HELP|  Set or Get Sle Scan.
AT+SSCANPARA    | -- | GET| SET|HELP|  Set or Get Sle Scan parameters.
AT+SSEND        |  DO| -- | SET| -- |  into Data transmit
+OK

2、AT+SROLE?\r\n

查询 SLE 角色

+SROLE=1

这里2个WS8204,一主一从需要提前设好。

设置为主机:AT+SROLE=1

设置为从机:AT+SROLE=0

设置完成后,2个WS8204会自动连接

3、AT+SDISC\r\n

手动断开 SLE 连接

+SDISCONN:0,17
+SCONN:0,"24:db:bd:8c:76:dc"

可以看到,当执行此命令后,模块会自动重新连接,并显示对端MAC。

4、AT+SSEND透传

例如:

AT+SSEND=0,5\r\nCMD01

会透传5个字符:CMD01

+OK
>+SSEND:5


三、从机目标MCU处理

AT指令需要在PC机上通过串口工具进行发送,而从机目标MCU需要涉及UART的接收处理

1、UART接收中断

void USART4_3_IRQHandler(void)
{
	char c;
	char *comma_pos;
	uint8_t buff[10];
	if(usart_flag_get(USART4, USART_RDBF_FLAG) != RESET)
  {
		usart_flag_clear(USART4,USART_RDBF_FLAG);
		c=usart_data_receive(USART4);
    usart4_rx_buffer[usart4_rx_counter++] = c;

		//穿透
		if(sle_trans_num>0&&(sle_trans_num==usart4_rx_counter))
		{
			
			sle_trans_complete_flag=TRUE;
			
		}
		else if((usart4_rx_buffer[usart4_rx_counter-2]=='\r')&&(usart4_rx_buffer[usart4_rx_counter-1]=='\n')){
			uart4_receive_complete_flag=TRUE;
			
			//判断是否接收到透传指令
			if(strstr((char*)usart4_rx_buffer,"+SRD")){
				comma_pos = strrchr(usart4_rx_buffer, ',');
				if (comma_pos != NULL) {
        // 将逗号后面的部分转换为整数
        sle_trans_num= atoi(comma_pos + 1);
				memset(usart4_rx_buffer,0,64);
				usart4_rx_counter=0;
				}
			}
		}	
	}

}

主要处理2类接收数据:

一是AT指令,可以通过判断接收缓存中最后两个字节是否为\r\n确认,如果设置指令传输完成标志:uart4_receive_complete_flag=TRUE;

二是透传数据,对于指令中含有+SRD信息的,可以确定下一条指令为透传数据。并且可以确定透传数据长度。对于透传类数据接收到达透传数据长度的,设置透传完成标志:sle_trans_complete_flag=TRUE;

2、主循环处理

	if(uart4_receive_complete_flag==TRUE){
		uart4_receive_complete_flag=FALSE;
		lcd_log((uint8_t*)usart4_rx_buffer);
		usart4_rx_counter=0;
		memset(usart4_rx_buffer,0,64);
	}
	if(sle_trans_complete_flag){
		sle_trans_num=0;
		sle_trans_complete_flag=FALSE;
		cmd_handler();
	}

对于AT指令,只显示命令;对于透传数据转到cmd_handler()处理。

3、cmd_handler()


void cmd_handler(void)
{
	at32_led_toggle(LED3);
	
	if(usart4_rx_buffer[3]=='0'&&usart4_rx_buffer[4]=='1')
	{
		at32_led_toggle(LED2);
		clrScr(VGA_BLUE);
	}else if(usart4_rx_buffer[3]=='0'&&usart4_rx_buffer[4]=='2')
	{
		at32_led_toggle(LED4);
		clrScr(VGA_GREEN);
	}
	lcd_log((uint8_t*)usart4_rx_buffer);

}

如果是CMD01:翻转LED2,改变LCD背景色为蓝色

如果是CMD02:翻转LED4,改变LCD背景色为绿色

四、运行效果

https://www.bilibili.com/video/BV1D49EY1EVX/?t=66.6

6.png






关键词: 星闪     WS8204    

专家
2025-03-05 19:48:05     打赏
2楼

感谢分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]