Red de conocimientos turísticos - Conocimientos sobre calendario chino - La aparición de chips BLE domésticos es imperativa: aplicaciones de comunicación en serie

La aparición de chips BLE domésticos es imperativa: aplicaciones de comunicación en serie

Velocidad en baudios del puerto serie: 115200b/s

Búfer de recepción del puerto serie: 256 Bytes

Búfer de envío del puerto serie: 256 Bytes

Asistente de puerto serie Envíe una trama de datos y el asistente de puerto serie recibirá los datos devueltos al mismo tiempo:

Longitud de envío 250B, devolución 250B

Longitud de envío 260B, devolución 4B, indicando que el buffer de recepción es solo 256 B

Desarrollar este módulo de comunicación de puerto serie solo requiere 3 pasos y 3 partes de código. Siga este método para comenzar rápidamente. La ventaja de este método es que el puerto serie. recibe datos sin perder datos. Recibe un marco de datos completo antes de procesar los datos. Es muy adecuado para la interfaz de comunicación, los usuarios pueden copiar directamente el código y colocarlo en la ubicación correspondiente del sistema. El autor pasó mucho tiempo probando y aprobó, lo que le ahorra tiempo de desarrollo.

1. Configuración de inicialización del puerto serie

system_set_port_pull(GPIO_PA0, GPIO_PULL_UP, true);

system_set_port_mux(GPIO_PORT_A, GPIO_BIT_0, PORTA0_FUNC_UART0_RXD

<); p > System_Set_port_mux (gpio_port_a, gpio_bit_1, porta1_func_uart0_txd);

UART_INIT (UART0, 1152);

nvic_enableirq (uart0_irqn);

void uart0_IRQHandler( vacío)

{

uint8_t datos

cambiar (__UART_INT_GET_ID(Uart0))

{

caso INT_INDEX_TXE:

{

/* Tx interrupción vacía y desactivación de quince */

Uart0-gt; IER.PTIME = 0;

Uart0-gt; IER_DLH.IER.ETBEI = 0;

//co_printf("----gt;INT_INDEX_TXEr "); p> descanso

caso INT_INDEX_RX:

caso INT_INDEX_RX_TOUT:

{

/ *Rx listo*/

//rx quince tiene al menos un dato

/* while (Uart0-gt; LSR.LSR_BIT.DR)

{

data = Uart0 -gt; DATA_DLL.DATA;

//uart_fifo_data_rx(datos);

uart_putc_noint_no_wait(UART0, datos) */

while (Uart0-gt; LSR.LSR_BIT.DR)

{

datos = Uart0- gt; DATA_DLL.DATA

//uart_putc_noint_no_wait(UART0, datos);

stTxUartBuf.txBuf[stTxUartBuf.size] = datos

stTxUartBuf.size

if ( stTxUartBuf.size gt; = uartRxBufferMAX)

{

stTxUartBuf.size = 0;

}

App_uartTimeoutTaskStart();

}ruptura

caso INT_INDEX_LINE:

{

volátil uint32_t line_status = Uart0-gt; LSR.LSR_DWORD;

//co_printf("----gt;INT_INDEX_LINE [x]r ", line_status

}romper;

predeterminado:

romper

}

}

__atributo__((sección( "ram_code"))) void uart0_isr(void)

{

uart0_IRQHandler()

}

/*

* Función: handle_UartRxHandle

*

* Anotación: el puerto serie recibe una trama de procesamiento de datos

*

* Entrada: dat: caché len: longitud

* Salida: Ninguna

*

*/

static void handle_UartRxHandle(uint8_t *dat , uint32_t len)

{

//co_printf("len:dr ",len

uart_send_len(dat,len

);

//UART_to_AT_CMD(dat, len);

}

/*

* Función: App_uartProcess

*

* Nota: El puerto serie recibe una trama de procesamiento de datos

*

* Entrada: Ninguna

* Salida: Ninguna

*

*/

static void App_uartProcess(void *param)

{

handle_UartRxHandle(stTxUartBuf.txBuf, stTxUartBuf .size);

stTxUartBuf.size = 0;

}

/*

* Función: App_uartHandlerInit

*

* Nota: Puerto serie que recibe la inicialización de la aplicación

*

* Entrada: Ninguna

* Salida: Ninguna

*

*/

static void App_uartHandlerInit(void)

{

os_timer_init(amp; uart_process_timer, App_uartProcess , NULL);

}

>

/*

* Función: App_uartTimeoutTaskStart

*

* Anotación: Comience a recibir y espere el tiempo de espera de datos en serie

*

* Entrada: Ninguna

* Salida: Ninguna

*

*/

void App_uartTimeoutTaskStart( void)

{

os_timer_start(amp; uart_process_timer, 20, false); //inicia el temporizador antivibración de 10 ms

}

/css/tongji.js">