Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 7636|Resposta: 0

Jornada Zigbee (5): Vários experimentos básicos importantes do CC2430 - comunicação serial

[Copiar link]
Publicado em 30/10/2014 23:18:18 | | | |
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 experimento

Perceba 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 experimental

Antes 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 experimentais

Primeiro, 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ão

Este 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.






Anterior:Jornada Zigbee (4): Vários experimentos básicos importantes do CC2430 - interrupção do temporizador
Próximo:Zigbee Journey (6): Vários experimentos básicos importantes do CC2430 - ADC amostragem única
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com