这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【FRDM-MCXW71测评】4、串口应用

共1条 1/1 1 跳转至

【FRDM-MCXW71测评】4、串口应用

高工
2025-05-22 13:01:43     打赏

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

image.png

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

image.png

        那么我们将通过这个串口接收数据,加入对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
}

        可以看到下面的控制模式,灯是跟随着变化的:

image.png

        变个装看一下:

image.png

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





关键词: FRDM-MCXW71     串口    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]