Módulo IoT Lora desde la entrada hasta la competencia (7) comunicación en serie

I. Introducción

        En el diseño del programa del módulo Lora, la comunicación del puerto serie debe ser un método de comunicación extremadamente importante y de uso común.Con la ayuda de la comunicación del puerto serie, no solo podemos transmitir los datos que obtenemos al exterior, sino también responder a los comandos externos. .

        De manera similar, en la rutina, se proporciona una biblioteca llamada usart1-board.c para ayudarnos a completar mejor y más rápido el desarrollo de las tareas de comunicación en serie.

2. Implementación del código

        La tarea de este artículo es enviar los datos obtenidos en formato ASCII a través del puerto serie y aceptar las instrucciones de la computadora host a través del asistente de depuración del puerto serie para realizar las operaciones correspondientes.

        Las tareas específicas son las siguientes:

        La microcomputadora de un solo chip envía datos de luz a la computadora superior cada segundo y registra el número de veces de envío.Al recibir el comando de reinicio FA 00 FB de la computadora superior, borre la cantidad de veces de envío.

        Al analizar la biblioteca usart1-board.c, a menudo usamos los siguientes métodos:

void USART1_Init(uint32_t bound);
//初始化串口 bound为波特率
void USART1_SendStr(uint8_t *Data, uint16_t length);
//发送uint8_t类型数据数组 length为发送的长度
uint16_t USART1_ReadRxBuffer( uint8_t *payload);
//接受来自串口的内容并存入传入的数据数组内 返回接受到的数据长度

        Ejemplo de código:

#include <string.h>
#include "board.h"
#include "hal_key.h"
#include "tim-board.h"
#include "timer_handles.h"
#include "led_light.h"
#include "adc_reader.h"
#include <math.h>          //library 
#include <stdio.h>
#include "stm32l1xx_hal.h" // controller register definitions 
#include "sht1x.h"         // controller register definitions 
#include "sht3x.h"
#include "usart1-board.h"

void Init() {
    BoardInitMcu();
    BoardInitPeriph();
    keys_init();//按键初始化
    setTimer2Callback(Time2Handler);
    Tim2McuInit(1);//定时器初始化,设置定时中断1ms中断一次
};

int count=0;//用于记录发送次数
float temp=0,hum=0,light=0;

uint8_t data[30];
int main( void )
{
    Init();
		ADCS_Init();//初始化ADC
		hal_temHumInit();//初始化温湿度模块
		USART1_Init(115200);
    while( 1 )
    {
				HAL_Delay(1000);//延时1000ms
				memset(data,'\0',30);//清空数组内容
				if(USART1_ReadRxBuffer(data)!=0)//如果接收到内容
				{
					if(data[0]==0xfa)//如果指令正确
						if(data[1]==0x00)
							if(data[2]==0xfb)
								count=0;//计数器清零
				}
				AdcScanChannel();//更新通道值
				light=((5.0/2.0)*AdcReadCh0())*100.0;//获取光照并通过公式计算
				call_sht11(&temp,&hum);//获取温湿度
				memset(data,'\0',30);//清空数组内容
				sprintf((char *)data,"Count=%d,Light=%.2f Lx",count+1,light);//将内容存入数组
				USART1_SendStr(data,30);//发送数据
				count++;//发送完一次数据计数器增加
    }
}

        Mostrar resultados:

        

        En este punto, hemos completado la recepción y el envío de datos del puerto serie, pero esto es solo la base para que aprendamos la comunicación del puerto serie.

        En general, hay dos formas de analizar los datos de la comunicación del puerto serie: ASCII y hexadecimal. Pero esencialmente se transmiten en binario, pero los datos se procesan de manera diferente.

3. Sobre el procesamiento de datos

        En cuanto al procesamiento de datos, generalmente se divide en conocimiento básico y análisis de datos.El aprendizaje puede ayudarnos a mejorar nuestro pensamiento de programación y escribir los programas que necesitamos mejor y más rápido.

        Si desea dominar, los siguientes dos artículos son con los que debe estar familiarizado:

Zigbee, puerto serial de microcomputadora de un solo chip STM32 enviará y recibirá transmisión de datos-análisis de uint8, uint16 y otros datos-múltiples datos y análisis de transmisión de puerto serial-Internet de las cosas

Métodos comunes de conversión y procesamiento de datos en la transmisión de datos-Internet de las cosas Desarrollo-MCU Comunicación

Supongo que te gusta

Origin blog.csdn.net/qq_39724355/article/details/131146839
Recomendado
Clasificación