实际上我们在加载某个程序的时候都自动带了虚拟串口,这个连接的就是我们的其中一个串口,主要是为了好调试,比如通过调试器打印的一些状态就是:

调试器的虚拟串口连接的是UART1,我们可以看到一些打印信息,就是通过这个串口出去的:

那么我们将通过这个串口接收数据,加入对LED模式的控制,我们先看一下调试的虚拟串口调试模式,在 BOARD_InitDebugConsole();中,可以看到调试串口的基本信息:
/* The UART to use for debug messages. */ #define BOARD_USE_LPUART #define BOARD_DEBUG_UART_TYPE kSerialPort_Uart #define BOARD_DEBUG_UART_BASEADDR (uint32_t) LPUART1 #define BOARD_DEBUG_UART_INSTANCE 1U #define BOARD_DEBUG_UART_CLK_FREQ (CLOCK_GetFreq(kCLOCK_ScgSircClk)) #ifndef BOARD_DEBUG_UART_BAUDRATE #define BOARD_DEBUG_UART_BAUDRATE (115200U) #endif /* BOARD_DEBUG_UART_BAUDRATE */
使用的就是LPUART1,波特率为115200.接下来我们看一下收到的数据如何处理,通过调试器的数据接收通过轮询的方式查看,并将数据回传:
LED_Mode = GETCHAR(); PUTCHAR(LED_Mode);
直接将收到的数据给到LED_Mode,然后定时器中进行处理,打印出来当前闪烁的灯,LED_Mode只能存储最后一个数:
void LPTMR0_IRQHANDLER(void) {
uint32_t intStatus;
/* Reading all interrupt flags of status register */
intStatus = LPTMR_GetStatusFlags(LPTMR0_PERIPHERAL);
LPTMR_ClearStatusFlags(LPTMR0_PERIPHERAL, intStatus);
/* Place your code here */
LED_TimeCnt++;
if(LED_TimeCnt >= 50)
{
LED_TimeCnt = 0;
if(LED_Mode != LED_Modeing){
GPIO_PortSet(BOARD_INITPINS_LED_GREEN_GPIO, 1U << BOARD_INITPINS_LED_GREEN_PIN);
GPIO_PortSet(BOARD_INITPINS_LED_BLUE_GPIO, 1U << BOARD_INITPINS_LED_BLUE_PIN);
GPIO_PortSet(BOARD_INITPINS_LED_RED_GPIO, 1U << BOARD_INITPINS_LED_RED_PIN);
GPIO_PortSet(BOARD_INITPINS_LED_B_GPIO, 1U << BOARD_INITPINS_LED_B_PIN);
LED_Modeing = LED_Mode;
switch(LED_Modeing){
case 0:
PRINTF("\r\n RGB_GREEN blinking\r\n");
break;
case 1:
PRINTF("\r\n RGB_BLUE blinking\r\n");
break;
case 2:
PRINTF("\r\n RGB_RED blinking\r\n");
break;
case 3:
PRINTF("\r\n LED_B blinking\r\n");
break;
default:
break;
}
}
switch(LED_Modeing){
case 0:
GPIO_PortToggle(BOARD_INITPINS_LED_GREEN_GPIO, 1U << BOARD_INITPINS_LED_GREEN_PIN);
break;
case 1:
GPIO_PortToggle(BOARD_INITPINS_LED_BLUE_GPIO, 1U << BOARD_INITPINS_LED_BLUE_PIN);
break;
case 2:
GPIO_PortToggle(BOARD_INITPINS_LED_RED_GPIO, 1U << BOARD_INITPINS_LED_RED_PIN);
break;
case 3:
GPIO_PortToggle(BOARD_INITPINS_LED_B_GPIO, 1U << BOARD_INITPINS_LED_B_PIN);
break;
default:
break;
}
}
/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F
Store immediate overlapping exception return operation might vector to incorrect interrupt. */
#if defined __CORTEX_M && (__CORTEX_M == 4U)
__DSB();
#endif
}可以看到下面的控制模式,灯是跟随着变化的:

变个装看一下:

这个里相当于偷懒了,直接用的调试虚拟串口进行的。
我要赚赏金
