Я создал рабочий код, который отправляет массажные символы по символам, как показано ниже. но когда я попытался вместо того, чтобы написать много, отправьте команду 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
}
}