|
1. Conectando os níveis superior e inferior Em uma rede de detecção sem fio, o CC2430 precisa enviar os dados coletados para o computador hospedeiro (ou seja, PC) para processamento, e o computador host precisa enviar informações de controle para o CC2430. Tudo isso é inseparável da transmissão de informações entre os dois. Nesta seção, aprenderemos como implementar comunicação por porta serial entre o PC e o CC2430. O CC2430 inclui 2 interfaces de comunicação serialUSART0eUSART1, cada porta serial inclui dois modos:UART(assíncrono) modo,SPI(síncrono), esta seção trata apenas do modo UART). 2. Experimento de comunicação por porta serial(1) Introdução ao experimentoPerceba a comunicação entre a placa de desenvolvimento e o PC: O PC envia uma certa string para o CC2430, e o CC2430 retorna essa string para o PC após recebê-la. (2) Preparação experimentalAntes de começar a escrever código, você precisa configurar as facilidades de hardware: conexão correta + instalar o driver serial USB. São necessárias duas conexões de hardware: A porta JTAG da placa de desenvolvimento CC2430 → o depurador → porta USB do PC(Para depuração e download de programas) Porta serial da placa de desenvolvimento CC2430 → porta USB do PC(Para comunicação de dados entre PC e CC2430) Depois, você precisa instalar o driver USB para serial (Endereço de download) Para enviar dados para a porta serial, uma ferramenta de depuração de porta serial (Endereço de download)。 (3) Fluxograma de programas
(4) Código-fonte experimental e análise/*
Descrição experimental: UART0, taxa de bauds 115200bps, PC envia uma string para CC2430 (terminando com o caractere @), CC2430 retorna a string após recebê-la
*/
#include
sem assinatura Charrecv_buf[300] = {0};
sem assinatura Charrecv_count =0;
/*系统时钟初始化
-------------------------------------------------------*/
vazioxtal_init(vazio)
{ SONO &= ~0x04; //都上电
enquanto(! (SONO &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Escolha um oscilador de cristal de 32MHz SONO |=0x04;
}
/*UART0通信初始化
-------------------------------------------------------*/
vazioUart0Init(sem assinatura CharStopBits,sem assinatura CharParidade)
{ PERCFG&= ~0x01; Selecione UART0 como a primeira posição opcional, ou seja, RXD para P0.2 e TXD para P0.3 P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口
U0CSR =0xC0; Configure para o modo UART e ative o receptor
U0GCR = 11; U0BAUD = 216; Defina a taxa de UART0 bauds para 115200bps, quanto ao motivo de ser 216 e 11, consulte o manual chinês do CC2430
U0UCR |= StopBits| Paridade; //设置停止位与奇偶校验
}
/*UART0发送数据
-------------------------------------------------------*/
vazio Uart0Send(sem assinatura Chardados)
{
enquanto(U0CSR&0x01); //等待UART空闲时发送数据 U0DBUF = data;
}
/*UART0发送字符串
-------------------------------------------------------*/
vazioUart0SendString(sem assinatura Char*s)
{
enquanto(*s !=0) //依次发送字符串s中的每个字符 Uart0Send(*s++);
}
/*UART0接受数据
-------------------------------------------------------*/
sem assinatura CharUart0Receive(vazio)
{
sem assinatura Chardados;
enquanto(! (U0CSR&0x04));//查询是否收到数据,否则继续等待 data=U0DBUF; //提取接收到的数据
retornodados;
}
/*主函数
-------------------------------------------------------*/
vaziomain(vazio)
{
sem assinatura Chari,b;
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验 Uart0SendString("Por favor, a string de entrada terminou com '@'!");
recv_count =0;
enquanto(1) {
enquanto(1) { b = Uart0Recebe(); UART
se(b=='@')Intervalo; Se '@' for recebido, ele sai do loop e gera a string
recv_buf[recv_count] = b; Se não for '@', continue adicionando caracteres ao array de caracteres recv_buf[] recv_count++; }
para(i=0; i<recv_count; i++)="" [cor="rgb(0," 136,="" 0)]="" string de saída[="" i][="" cor] Uart0Send(recv_buf);
Uart0SendString(""); recv_count =0; //重置 }
}
Primeiro, configure a porta de E/S correspondente ao USART0: passe o parPECFRG.0Defina o UART0 para a posição opcional 1, ou seja, P0.2 para RXD e P0.3 para TXD. Depois, configure P0.2 e P0.3 como E/S externo de dispositivos. Depois, selecione o modo UART e ative o receiver. Depois, configure os parâmetros do USART0: taxa de baud 115200, sem paridade e bit de parada de 1. Depois, envie uma string para o PC: Por favor, string de entrada terminado com'@'! , e então use while(1) para continuar tentando receber todos os caracteres. Quando esse personagem não faz isso'@', significa que a entrada não está completa, e continue adicionando esse caractere ao array de caracteres recv_buf; Esse personagem é perfeito'@', a entrada está completa, então o loop é enviado ao PC para que cada caractere do recv_buf seja enviado ao PC, enquanto o recv_count é reiniciado. (5) Resultados experimentaisPrimeiro, complete a conexão de hardware, abra a ferramenta de depuração de portas seriais e configure os parâmetros conforme mostrado abaixo:
Clique em "Abrir Porta Serial", então inicie a depuração do IAR, deixe o programa rodar, e você verá a string esperada aparecendo na caixa de recepção da ferramenta de depuração da porta serial:
Depois, digite "Hello" na caixa de texto de envio abaixo da ferramenta de depuração de portas seriais, como mostrado abaixo:
Depois de clicar em "Enviar", você pode se perguntar por que o CC2430 não retorna o que você digitou, porque você não terminou em @. Digitamos "Zigbee!@" novamente, clicamos em "Enviar" e o resultado é o seguinte:
O conteúdo esperado "Hello Zigbee!" será exibido. Acabou! Este é o fim do experimento~ 3. ConclusãoEste artigo descreve a comunicação entre a placa de desenvolvimento CC2430 e o computador hospedeiro. Agora que temos o básico da comunicação serial, vamos aprender sobre amostragem única de ADC (conversão analógico-digital) na próxima seção. Com o ADC, podemos coletar o valor do sensor de temperatura na placa de desenvolvimento e enviar o valor da temperatura para o PC através da porta serial para exibi-lo.
|