stm32的蓝牙串口模块的总结,ATK-MW579 模块

在使用指令之前先了解

进入配置模式指令

所有的指令使用之前,首先进入配置模式,使用进入配置模式指令;

 进入透传模式指令

配置完了,进入数据传输就得用这个指令;

 无论是从机还是主机,都要这个指令才能传输,没有上电就可以传输的指令;

我用的两个模块,要主次分明

模块分主次模块,用指令设置一个为主模块,一个为次模块。不然扫不出来周围蓝牙;

程序设计:关键部分

/*
    cmd      发送的指令
    ack      响应指令中的部分
    timeout  时间限时
有返回参数指示

*/

uint8_t atk_mw579_send_at_cmd(char *cmd ,char *ack ,uint32_t timeout)
{
	uint8_t *reg=NULL;
  atk_mw579_uart_rx_restart(); //初始化接收长,清空接收数组
	u3_printf("%s" , cmd);
  if(cmd == NULL || timeout == 0 ) //cmd是空的参数返回,或者延时为0,返回表明参数错误
	{
		return atk_mw579_EOEER;
	}
	else
	{
			while( timeout > 0)
			{
				//if(atk_mw579_receive_finish_flag == true)
				if(USART_GetFlagStatus( USART3, USART_FLAG_IDLE )  )//接收空闲就表示接收完,即便没有接收后的空闲也没事
				{
					if(usart3_rx_len>2) //如果接收到了
					{
						 usart3_rx_buff[usart3_rx_len] = '\0';
						 
						 reg=usart3_rx_buff;
						atk_mw579_receive_finish_flag=false;
					}
					 
				}else reg = NULL;
				if(reg != NULL)  //如果接收到了,给出了地址
				{ 
						if(strstr((const char *)reg,(const char *)ack)!=NULL)//对比,reg存在ack,就成功
						{  
							 return atk_mw579_EOK; //返回正确
						}
						else{
							 atk_mw579_uart_rx_restart();//初始化接收长,清空接收数组
								 
						}
				}
				timeout--;
				delay_Ms_Block(1);
			}
			return atk_mw579_OUTTIME;//返回超时
	
	}
}

其中关键函数

部分解释如下链接:

函数形参之不定长参数列表va_lis,va_start,va_arg,va_end,vsprintf_qq_36658033的博客-CSDN博客

/***************/
/*
  使用不定长参数输出
*/

void u3_printf(char *fmt , ...)
{
	int i,j;
  va_list ap;//不定长参数,固定用法,其实这也是一个指针;
	va_start(ap,fmt);//不定长参数,固定用法,也就是第一个参数地址
	vsprintf( (char *)usart3_tx_buff ,fmt ,ap);
	va_end(ap);//固定
  j=strlen((const char *)usart3_tx_buff );
	for(i=0;i<j;i++)
	{
		while( !(USART_GetFlagStatus( USART3, USART_FLAG_TXE)) ); //发送
		USART_SendData(USART3,usart3_tx_buff[i]);
		
	}
}

为了仿真方便修改进入配置指令

/* 进入配置模式 */
uint8_t atk_mw579_enter_config_mode()
{
	uint8_t reg;
  reg=atk_mw579_send_at_cmd("+++a","ok" ,1000);
	reg=atk_mw579_send_at_cmd("+++a","OK" ,1000);
	if( reg == atk_mw579_EOK)
	{
	   return atk_mw579_EOK;
	}
	else return atk_mw579_EOEER;

}

因为,在上电时候,因为第一次是正常的指令,返回也是小写ok。再仿真的时候其实已经进入了配置模式,但是呢返回却是大写OK,所以干脆写两次命令;

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ATK-S1216F8是一种高性能的GPS模块,适用于STM32开发板进行测试实验。 首先,我们需要确保STM32开发板上的引脚与GPS模块的引脚连接正确。通常,GPS模块的TX引脚连接到STM32的RX引脚,而RX引脚连接到STM32的TX引脚。此外,还需要将GPS模块的电源引脚连接到STM32的电源引脚。 接下来,我们需要编写相应的代码来与GPS模块进行通信和处理接收到的数据。在STM32开发环境中,我们可以使用相关的库函数来简化编程过程。 首先,我们需要设置UART串口通信,并初始化与GPS模块通信所需的参数,例如波特率和数据位数等。然后,我们可以使用UART接收函数来接收从GPS模块发送过来的数据。接收到的数据可以包含GPS的位置、速度、时间等信息。 在接收到数据后,我们可以使用相应的数据处理函数对数据进行处理和解析。例如,我们可以使用字符串处理函数来提取出需要的信息,如纬度、经度等。根据我们的需求,可以将解析后的数据显示在LCD显示屏上,或者通过串口进行输出。 在测试实验时,我们可以将STM32开发板与电脑连接,并使用开发环境提供的调试工具以图形化界面的形式来观察测试结果,或者可以在程序中添加适当的调试输出语句来观察数据的处理过程。 总之,通过正确连接、编写相应的代码以及合理的测试实验设计,我们可以使用STM32开发板对ATK-S1216F8 GPS模块进行测试实验。这将有助于了解GPS模块的功能特性,验证其性能,并为后续的应用开发提供基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值