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
* p>
* 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 p>
*
*/
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
}