|
1. Conexión entre los niveles superior e inferior En una red de detección inalámbrica, el CC2430 necesita enviar los datos recogidos al ordenador anfitrión (es decir, PC) para su procesamiento, y el ordenador anfitrión debe enviar la información de control al CC2430. Todo esto es inseparable de la transmisión de información entre ambos. En esta sección, aprenderemos cómo implementar la comunicación por puerto serie entre el PC y el CC2430. El CC2430 incluye 2 interfaces de comunicación serialUSART0yUSART1, cada puerto serie incluye dos modos:UART(asíncrono) modo,SPI(modo síncrono), esta sección solo trata sobre el modo UART). 2. Experimento de comunicación por puerto serial(1) Introducción al experimentoTen en cuenta la comunicación entre la placa de desarrollo y el PC: el PC envía una cadena determinada al CC2430, y el CC2430 devuelve esta cadena al PC tras recibirla. (2) Preparación experimentalAntes de empezar a escribir código, necesitas configurar las funciones de hardware: conexión correcta + instalar el controlador serie USB. Se requieren dos conexiones de hardware: El puerto JTAG de la placa de desarrollo CC2430 → el depurador → el puerto USB del PC(Para depuración y descarga de programas) Puerto serie de la placa de desarrollo CC2430 → puerto USB del PC(Para comunicación de datos entre PC y CC2430) Luego tienes que instalar el controlador USB a serie (Dirección de descarga) Para enviar datos al puerto serial, una herramienta de depuración de puertos serie (Dirección de descarga)。 (3) Diagrama de flujo del programa
(4) Código fuente experimental y análisis/*
Descripción experimental: UART0, velocidad de baudios 115200bps, PC envía una cadena a CC2430 (que termina con el carácter @), CC2430 devuelve la cadena tras recibirla
*/
#include
sin firmar charrecv_buf[300] = {0};
sin firmar charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
Vacíoxtal_init(Vacío)
{ SUEÑO &= ~0x04; //都上电
mientras(! (SUEÑO &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Elige un oscilador de cristal de 32MHz SUEÑO |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
VacíoUart0Init(sin firmar charStopBits,sin firmar charParidad)
{ PERCFG&= ~0x01; Selecciona UART0 como primera posición opcional, es decir, RXD a P0.2 y TXD a P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Configura en modo UART y activa el receptor
U0GCR = 11; U0BAUD = 216; Configura la tasa de UART0 baudios a 115200 bps, y para saber por qué es 216 y 11, consulta el manual chino del CC2430
U0UCR |= StopBits| Paridad; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
Vacío Uart0Send(sin firmar chardatos)
{
mientras(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = datos;
}
/*UART0发送字符串
-------------------------------------------------------*/
VacíoUart0SendString(sin firmar char*s)
{
mientras(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
sin firmar charUart0Receive(Vacío)
{
sin firmar chardatos;
mientras(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
devolucióndatos;
}
/*主函数
-------------------------------------------------------*/
Vacíomain(Vacío)
{
sin firmar chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("¡Por favor, la cadena de entrada terminaba en '@'!");
recv_count =0;
mientras(1) {
mientras(1) { b = Uart0Recibe(); UART
si(b=='@')Pausa; Si se recibe '@', salta fuera del bucle y emite la cadena
recv_buf[recv_count] = b; Si no es '@', sigue añadiendo caracteres al array de caracteres recv_buf[] recv_count++; }
para(i=0; i<recv_count; i++)="" [color="rgb(0," 136,="" 0)]="" cadena de salida[="" i][="" color] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Primero, configura el puerto de E/S correspondiente a USART0: pasa el parPECFRG.0Configura UART0 en la posición opcional 1, es decir, P0.2 para RXD y P0.3 para TXD. Luego configura P0.2 y P0.3 como E/S externa de dispositivos. Luego selecciona el modo UART y activa el receptor. Luego configura los parámetros de USART0: tasa de baudios 115200, sin paridad y bit de parada de 1. Luego envía una cadena al PC: Por favor Cadena de entrada terminada con'@'! , y luego usa while(1) para seguir intentando que todos los personajes sean recibidos. Cuando este personaje no lo hace'@', significa que la entrada no está completa, y continúan añadiendo este carácter al array de caracteres recv_buf; Este personaje es perfecto'@', la entrada está completa, por lo que el bucle se envía al PC para que cada carácter del recv_buf se envíe al PC, mientras se reinicia el recv_count. (5) Resultados experimentalesPrimero, completar la conexión de hardware, abrir la herramienta de depuración de puertos serie y configurar los parámetros como se muestra a continuación:
Haz clic en "Abrir puerto serial", luego inicia la depuración de IAR, deja que el programa se ejecute y verás la cadena esperada apareciendo en la caja de recepción de la herramienta de depuración de puertos seriales:
Luego introduce "Hola" en el cuadro de texto de envío debajo de la herramienta de depuración de puertos seriales, como se muestra a continuación:
Después de hacer clic en "Enviar", puede que te preguntes por qué el CC2430 no devuelve lo que escribiste, porque no terminaste en @. Escribimos "Zigbee!@" de nuevo, hacemos clic en "Enviar" y el resultado es así:
El contenido esperado "¡Hola Zigbee!" aparecerá en pantalla. ¡Se acabó! Este es el final del experimento~ 3. ConclusiónEste artículo describe la comunicación entre la placa de desarrollo CC2430 y el ordenador anfitrión. Ahora que tenemos lo básico de la comunicación serie, aprendamos sobre el muestreo único de ADC (conversión analógica-digital) en la siguiente sección. Con ADC, podemos recoger el valor del sensor de temperatura en la placa de revelado y enviar el valor de temperatura al PC a través del puerto serie para mostrarlo.
|