как отправить целые строки с помощью fprintf для UART efm32lg - PullRequest
0 голосов
/ 02 августа 2020

Я создал рабочий код, который отправляет массажные символы по символам, как показано ниже. но когда я попытался вместо того, чтобы написать много, отправьте команду char, команду fprintf.

fprintf (USART1, "NONE \ n");

вообще ничего не работало. Где я go ошибся в использовании fprintf, или есть какая-то другая команда, которая может отправить сразу всю строку? Спасибо.

#include "em_device.h"
#include "em_cmu.h"
#include "em_gpio.h"
#include "em_usart.h"
#include "em_chip.h"
//////////////////////////////////////
#include <stdint.h>
#include <stdbool.h>
#include "em_emu.h"
#include "bsp.h"
#include "bsp_trace.h"
///////////////////////////////////////
#define LED_PORT_E    gpioPortE
#define LED_PIN_E     15

#define LED_PORT_A    gpioPortA
#define LED_PIN_A     15



#define BUFFER_SIZE 1
char buffer[BUFFER_SIZE];

volatile uint32_t msTicks; /* counts 1ms timeTicks */

void Delay(uint32_t dlyTicks);
void SysTick_Handler(void)
{
  msTicks++;       /* increment counter necessary in Delay()*/
}
void Delay(uint32_t dlyTicks)
{
  uint32_t curTicks;

  curTicks = msTicks;
  while ((msTicks - curTicks) < dlyTicks) ;
}
/**************************************************************************//**
 * @brief  Main function
 *****************************************************************************/
int main(void)
{


  //char welcome_string[] = "Silicon Labs UART Code example!\r\f";
  int i,j;
i=0;
  // Chip errata
  CHIP_Init();

  // Enable oscillator to GPIO and USART1 modules
  CMU_ClockEnable(cmuClock_GPIO, true);
  CMU_ClockEnable(cmuClock_USART1, true);

 // BSP_TraceProfilerSetup();

    /* Setup SysTick Timer for 1 msec interrupts  */
    if (SysTick_Config(CMU_ClockFreqGet(cmuClock_CORE) / 1000)) {
      while (1) ;
    }

    /* Initialize LED driver */

   // BSP_LedsInit();
  //  BSP_LedSet(0);
    GPIO_PinModeSet(LED_PORT_E,15,gpioModePushPull,1);
    GPIO_PinModeSet(LED_PORT_A,15,gpioModePushPull,1);

  // set pin modes for UART TX and RX pins
  GPIO_PinModeSet(gpioPortC, 1, gpioModeInput, 0);
  GPIO_PinModeSet(gpioPortC, 0, gpioModePushPull, 1);

 // GPIO_PinModeSet(LED_PORT_A,15,gpioModePushPull,0);
  //GPIO_PinModeSet(LED_PORT_E,15,gpioModePushPull,0);

  // Initialize USART asynchronous mode and route pins
  USART_InitAsync_TypeDef init = USART_INITASYNC_DEFAULT;
  //init.parity=usartEvenParity;
  USART_InitAsync(USART1, &init);

  USART1->ROUTE |= USART_ROUTE_TXPEN | USART_ROUTE_RXPEN;



  while (1)
  {

//E-green
//A-red

//    Delay(1000);
 //       GPIO_PinOutSet(LED_PORT_E,15);
//        Delay(1000);
         // USART_Tx(USART1,"red LED was turned on\r\f");

//      Delay(1000);

      switch ( USART_Rx(USART1))
      {
           case 'h':

               GPIO_PinOutSet(LED_PORT_E,15);
               USART_Tx(USART1,'G');USART_Tx(USART1,'R');USART_Tx(USART1,'E');USART_Tx(USART1,'E');USART_Tx(USART1,'N');USART_Tx(USART1,' ');USART_Tx(USART1,'O');USART_Tx(USART1,'F');USART_Tx(USART1,'F');USART_Tx(USART1,'\n');

              fprintf(USART1,"LED Green is off\n");
              break;
           case 'g':
              GPIO_PinOutClear(LED_PORT_E,15);
              USART_Tx(USART1,'G');USART_Tx(USART1,'R');USART_Tx(USART1,'E');USART_Tx(USART1,'E');USART_Tx(USART1,'N');USART_Tx(USART1,' ');USART_Tx(USART1,'O');USART_Tx(USART1,'N');USART_Tx(USART1,'\n');
              fprintf(USART1,"LED Green is ON\n");
          break;
           case 't':
               GPIO_PinOutSet(LED_PORT_A,15);
               USART_Tx(USART1,'R');USART_Tx(USART1,'E');USART_Tx(USART1,'D');USART_Tx(USART1,' ');USART_Tx(USART1,'O');USART_Tx(USART1,'F');USART_Tx(USART1,'F');USART_Tx(USART1,'\n');
               fprintf(USART1,"LED RED is off\n");
           break;
           case 'r':
              fprintf(USART1,"LED RED is ON\n");
               USART_Tx(USART1,'R');USART_Tx(USART1,'E');USART_Tx(USART1,'D');USART_Tx(USART1,' ');USART_Tx(USART1,'O');USART_Tx(USART1,'N');USART_Tx(USART1,'\n');
               GPIO_PinOutClear(LED_PORT_A,15);
            break;

           default:
               fprintf(USART1,"NONE\n");
              // USART_Tx(USART1,'N');USART_Tx(USART1,'O');USART_Tx(USART1,'N');USART_Tx(USART1,'E');USART_Tx(USART1,'\n');
               break;
          //int num = 321;
          //char snum[5];

          // convert 123 to string [buf]
         // itoa(num, snum, 10);
      }//end switch

  }
}
...