STM32控制NBIOT模块收发信息(附代码)

1、连线

一般来说只需要将NB模块的串口线对应连接单片机的串口即可。
具体连线方式为模块的VCC,GND分别连接单片机的5V和GND,模块的TXD连接单片机的PB10,RXD连接PB11.。即通过串口三与nb模块通信

2、代码

串口三的配置代码这里不详细说,都是仿照串口1的代码抄写过来的。需要的直接下载工程文件即可。
下面看看核心代码:

void NBIOT_test(void)
{
//	char wbuf[10];
	while(NBIOT_send_cmd("AT","OK\r\n",20))//检查WIFI模块是否在线
	printf("%s\r\n", "AT指令测试正常"); //
	while(NBIOT_send_cmd("AT+CSQ", "OK\r\n", 20));
	printf("%s\r\n", "模块信号测试正常"); //点亮指示灯
	while (NBIOT_send_cmd("AT+CGATT?", "+CGATT:1\r\n\r\nOK\r\n", 20));
	printf("%s\r\n", "模块入网测试正常"); //点亮指示灯
  while (NBIOT_send_cmd("AT+NCDP=49.4.85.232,5683", "OK\r\n", 20));
	printf("%s\r\n", "模块连接云平台正常"); //
	while (NBIOT_send_cmd("AT+NCDP?", "+NCDP:49.4.85.232,5683\r\n\r\nOK\r\n", 20));
	printf("%s\r\n", "模块连接云平台测试正常"); //
	while (NBIOT_send_cmd("AT+NNMI=1", "OK\r\n", 20));
	printf("%s\r\n", "模块接收消息开启"); //
//	snprintf(wbuf, 1024, "%s%d,%d","AT+NMGS=",1,12);
//	printf("%s\r\n", wbuf); //
//	while (NBIOT_send_cmd((char*)wbuf,"OK\r\n", 20));//用这三句话程序会死掉
	 u3_printf("%s%d,%02X%02X%02X%02X%02X%02X%02X\r\n","AT+NMGS=",7,1,1,1,1,1,1,1);//发送指令后面必须要有换行
//	if(NBIOT_check_cmd("OK\r\n"))
//	{
	  printf("%s\r\n", "模块发送消息成功"); //
//	}
//	  NBIOT_response(1);//检查ATK-ESP8266模块发送过来的数据,及时上传给电脑
	memset(USART3_RX_BUF,0,USART3_MAX_RECV_LEN);
	USART3_RX_STA=0;
}

这里都写有直接的说明了,这里不再累赘重复。
下面看看接收的核心代码响应接收的核心函数:

void NBIOT_response(u8 mode)
{
   int i;
	if((USART3_RX_STA&0X8000))		//接收到一次数据了
	{ 
		USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
  	printf("串口3接收到的原始数据是%s\r\n",USART3_RX_BUF);	//发送到串口
		res = (char*)USART3_RX_BUF;
//		if(set_ok == 0)//还没锁死之前可以修改数据
//			if(send_ok == 0)//还没锁死之前可以修改数据
//		{
		  if (strstr((char*)res, "+NNMI:") !=NULL) //是否包含回传数据
      {					
			  printf("NB模块接收云平台数据是%s",res);	//发送到串口
				sscanf(res,"\r\n+NNMI:%d,%s\r\n",&tem[0],str);
			  printf("长度是%d,第一位数据是%s",tem[0],str);	//发送到串口
				for(i=0;i<16;i++)
					 {
						tem[i] = str[i]-48;
						printf("%d\r\n",tem[i]);
					 }
					 if(send_ok == 0)//还没锁死之前可以修改数据
					 {
					 kind_flag = tem[3];
					 star_hour = tem[5]*10+tem[7];
					 star_min  = tem[9]*10+tem[11];
					 }
					 sok      = tem[15];
           send_ok = 1;					 
			}
      if (strstr((char*)res, "+CCLK:") !=NULL) //是否包含回传数据
      {					
			  printf("当前网络的时间是%s",res);	//发送到串口
				sscanf(res,"\r\n+CCLK:%d/%d/%d,%d:%d:%d+%d\r\n", &time[0], &time[1], &time[2],&time[3],&time[4],&time[5],&time[6]);
				if(time[3]+8 >= 24)//转化时间
				{
					time[3]=time[3]+8-24;
				}
				DS3231_Set(time[0],time[1],time[2],time[3]+8,time[4],30);  //首次设置时间,设置完成后注释掉,重新下载一次程序即可掉电保存年,月,日,时,分,秒	 
			  printf("现在当前的时间是:%d:%d\r\n",time[3],time[4]);	//发送到串口
			}
			if (strstr((char*)res, "+CSQ") !=NULL) //是否包含回传数据
      {					
			  printf("当前的信号是%s",res);	//发送到串口
				sscanf(res,"\r\n+CSQ:%d,%d\r\n", &time[7],&time[8]);
				csq=time[7];
			  printf("现在当前的信号是:%d\r\n",csq);	//发送到串口
			}
//		}
		if(mode)//把数组缓存清零
		{
			memset(USART3_RX_BUF,0,USART3_MAX_RECV_LEN);
		  USART3_RX_STA=0;
		}
	}
}

这些是取出数据的代码,就是取出对应的数据代码。
下面看看发送的代码,发送的代码就是直接将数据通过串口三发送出去即可。

			u3_printf("%s%d,%02X%02X%02X%02X%02X%02X%02X\r\n","AT+NMGS=",7,temperature/10,kind_flag,0,star_hour,star_min,star,csq);//发送指令后面必须要有换行
	        printf("%s\r\n", "模块发送消息成功"); //

我这里通过一个定时器将数据发送。

说多了也无意义,我直接将我的代码直接分享出来就好了。想要的直接拿来用即可。不过需要注意的是你要在云平台上面设置对应的插件才可以在云平台上面接收到对应的参数,否则是无法接收的,因为参数无法对应的问题。微信公众号一手创客回复06即可获得整个程序的文件。或者蓝凑云链接:

https://wwa.lanzouq.com/b015ipphc
密码:df61
下一章我将我的云平台的插件内容展示出来。

  • 10
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 63
    评论
### 回答1: 要实现两块STM32F030C8T6之间的nrf无线通讯,你需要完成以下几个步骤: 1. 确定使用的nrf模块型号和通讯协议。nrf模块有很多种型号,如nrf24l01、nrf51822等。你需要选择一种适合你的应用的nrf模块,并确定使用的通讯协议,如SPI或I2C。 2. 连接nrf模块STM32F030C8T6。你需要将nrf模块的引脚连接到STM32F030C8T6上,并按照nrf模块的规格书进行电路连接。 3. 配置STM32F030C8T6的SPI或I2C通讯接口。在STM32F030C8T6上配置SPI或I2C通讯接口,以便与nrf模块进行通讯。 4. 编写STM32F030C8T6的驱动程序。你需要在STM32F030C8T6上编写驱动程序,以便实现与nrf模块之间的通讯。这包括初始化nrf模块、发送和接收数据等。 5. 测试通讯功能。在完成以上步骤后,你需要测试STM32F030C8T6之间的通讯功能,确保数据能够正常发送和接收。 需要注意的是,以上步骤只是一个大致的流程,具体实现会根据你选择的nrf模块和通讯协议而有所不同。你需要仔细阅读nrf模块STM32F030C8T6的规格书,并参考官方文档和示例代码来实现nrf无线通讯。 ### 回答2: 要在两块STM32F030C8T6之间实现nrf无线通讯,可以按照以下步骤进行: 首先,确认两块STM32F030C8T6的硬件接口是否兼容nrf无线模块。确保每个STM32开发板都有足够的GPIO引脚和串口接口用于连接nrf模块。 其次,通过SPI或者UART串口协议将nrf模块STM32F030C8T6连接起来。首先,配置STM32的SPI或UART工作模式和数据传输速率。然后,通过引脚连接将STM32的SPI或UART模块与nrf模块相连,并确保连接正确。 接下来,配置STM32的GPIO引脚以控制nrf模块的其他功能,如复位,中断等。这些引脚的配置可能会因具体的nrf模块型号而有所不同,需根据相关模块的规格书进行设置。 在软件层面,使用STM32的开发环境(如Keil或STM32CubeIDE)编写代码来实现nrf模块的初始化和配置。在代码中设置nrf模块的通信参数,如频率、信道、发射功率等。 编写接收和发送数据的代码。对于发送数据,STM32可以通过SPI或UART将数据发送给nrf模块,再由nrf模块通过无线信号发送给另一块STM32。对于接收数据,另一块STM32通过nrf模块接收无线信号,再通过SPI或UART接收到的数据。 最后,通过测试和调试确保无线通讯正常工作。可以使用适当的测试工具或示例代码来验证两块STM32F030C8T6之间的nrf无线通讯是否成功。 需要注意的是,以上只是一个大致的流程,具体实现的细节可能会因实际情况而有所不同。在实际操作中,应参考相关的硬件和软件文档,以确保正确实现nrf无线通讯。 ### 回答3: 要在两块STM32F030C8T6之间实现nrf无线通讯,首先需要确保两块STM32F030C8T6上都连接了nrf模块,并连接正确。接下来,可以采取以下步骤进行通讯的实现: 1. 配置nrf模块:通过SPI总线协议将STM32F030C8T6与nrf模块连接起来,并通过对nrf寄存器的配置来设置nrf模块的工作参数,包括通信频道、发射功率、数据速率等。 2. 初始化USART串口:通过USART串口协议将STM32F030C8T6与nrf模块连接起来,并配置串口的参数,包括波特率、数据位、停止位、校验位等。 3. 设计数据传输协议:可以自定义一种简单的数据传输协议,例如定义特定的数据包格式,包括数据头、数据体和校验位等。另外,还需要确定数据传输的方式,是点对点通讯还是广播通讯,以及是否需要数据的回传等。 4. 数据的发送和接收:在发送端的STM32F030C8T6上,可以通过串口或SPI总线将待发送的数据发送给nrf模块,并由nrf模块负责将数据传输到接收端的nrf模块上。在接收端的STM32F030C8T6上,则通过串口或SPI总线接收nrf模块传输过来的数据,并进行解析和处理。 5. 错误处理和重传机制:在通讯过程中,可能会出现数据传输错误或丢失的情况。为了增加通讯的可靠性,可以在协议中引入差错校正码或重传机制,以确保数据的正确传输。 总结:通过配置nrf模块、初始化串口、设计数据传输协议以及实现数据的发送和接收,可以在两块STM32F030C8T6之间实现nrf无线通讯。这样可以实现两块STM32F030C8T6之间的无线数据传输,拓展了系统的应用范围。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有梦的远方随处可栖

你的鼓你励将是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值