ME32G030的供的sdk都是使用原生寄存器操作的,需要一定C语言的基础,但是这样,也是非常高效的编程,编译的代码量非常小。

1、串口的初始化

在me32g030_uart.c中,提供了串口初始化的函数

void UART_Open(UART0_Type *uart, uint32_t baudrate, uint8_t parityoption, uint8_t rxinttriggerlevel)

根据函数说明:

<pre>Function Name        UART_Open
  • Function Definition        void UART_Open(UART0_Type *uart, uint32_t baudrate, uint8_t parityoption, uint8_t rxinttriggerlevel);
  • Function Description        Initial UART
  • Input Parameters        *uart : pointer to UART device, UART0/UART1/UART2/UART3
  •                         Baudrate: baudrate value
  •                         Parityoption: NO_PARITY, EVEN_PARITY, ODD_PARITY, UART_BIT9_ENABLE       
  •                         Rxinttriggerlevel; UART_TRIGGER_LEVEL_1_BYTE , UART_TRIGGER_LEVEL_4_BYTES , UART_TRIGGER_LEVEL_8_BYTES,UART_TRIGGER_LEVEL_18_BYTES  
  • Return Value        No
  • Condition        No
  • Function called        -</pre>
  • 复制代码

    第一个参数为UART0/UART1/UART2/UART3

    第二个参数为波特率

    第三个参数为奇偶校验

    第四个参数为接收中断的级别。

    2、串口IO的选择:

    根据原理图:

    image.png

    串口分别接到了PA2、PA3,初始化引脚如下:

    PA2_INIT(PA2_UART1_TX);

    PA3_INIT(PA3_UART1_RX);

    3、在接收中,判断UART 通讯线状态寄存器 (LSR】的接收位是否为1,如果为1,判断发送缓冲区是否为空为空是把接收到的数据装载进发送缓冲THR中,代码如下:

                     if (UART1->LSR_b.RDR)      //如果接收缓冲器状态不为空
  •                 {
  •                         if((UART1->LSR_b.THRE))  //如果发送缓冲器寄存器空
  •                                 UART1->THR=UART1->RBR;
  •                 }
  • 复制代码

    4、测试效果:

    image.png

    【总结】

    通过两个试用,感觉敏矽微的库非常简单好用,没有太多的花稍,使用简洁!