前言

本文来分享串口的收发测试,以及串口的最大工作速率。

过程

使用me32g030_sdk_v1\example\uart0_interrupt\MDK\demo.uvprojx进行测试

PA和PA3对应UART1,板载通过CH340N接到USB转串口

225549s1dn1vdebe1nf5ii

初始化代码

        //init UART pin

        PA2_INIT(PA2_UART1_TX);

        PA3_INIT(PA3_UART1_RX);


        //initial UART1

//        UART_Open(UART1,256000,UART_NO_PARITY,UART_TRIGGER_LEVEL_1_BYTE);

//        UART_Open(UART1,115200,UART_NO_PARITY,UART_TRIGGER_LEVEL_1_BYTE);

//        UART_Open(UART1,128000,UART_NO_PARITY,UART_TRIGGER_LEVEL_1_BYTE);

//                UART_Open(UART1,57600,UART_NO_PARITY,UART_TRIGGER_LEVEL_1_BYTE);

                UART_Open(UART1,115200,UART_NO_PARITY,UART_TRIGGER_LEVEL_4_BYTES);

//                UART_Open(UART1,38400,UART_NO_PARITY,UART_TRIGGER_LEVEL_1_BYTE);

//                UART_Open(UART1,19200,UART_NO_PARITY,UART_TRIGGER_LEVEL_1_BYTE);

//                UART_Open(UART1,14400,UART_NO_PARITY,UART_TRIGGER_LEVEL_1_BYTE);

//                UART_Open(UART1,9600,UART_NO_PARITY,UART_TRIGGER_LEVEL_1_BYTE);

        UART_EnableInt(UART1, UART_RX_INT);

        NVIC_EnableIRQ(UART1_IRQn);

接收中断收到数据原样返回

void UART1_IRQHandler(void)

{

        uint8_t byte_data;

        if (UART1->LSR_b.RDR)

        {

                if((UART1->LSR_b.THRE))

                {

                        byte_data = UART1->RBR;

                        UART1->THR= byte_data;

                }

        }

}

上位机发送开发板原样返回

225549tcc20s2s9sc747v4

115200波特率实测为(9bit 78uS)

1/(78/9)

115385Hz

225549it1jqqnshqkn0kay

1.5M

                UART_Open(UART1,1500000,UART_NO_PARITY,UART_TRIGGER_LEVEL_4_BYTES);

225550mj0rf32ifrjkjjfz

225550g6652os6bbz6h79c

实测9个bit6us

1.5M

225550tc1zcrrxrc212kdx

实测最大只能到1.5MHz

        temp=SystemCoreClock/(baudrate);

        uart->DLR=temp>>4;

        uart->FRAC=temp&0xF;

应为要保证DLR至少要为1

所以temp至少要为16,即baudrate最大为24000000/16=1.5MHz

如果还要加大速率则需要提高SystemCoreClock到48MHz。

AHB默认分频是2,系统时钟是48.2=24MHz

225550u2yj20lnj0nnnoje

这里将其分频改为1,则系统时钟是48/1=48MHz

  SYS_SetAHBClkDivider(1);

此时设置系统时钟时要设置FLASH周期为2,该接口会自动判断设置

225550qlta8z4lz4ldq8uw

此时UART最大可以3MHz

                UART_Open(UART1,3000000,UART_NO_PARITY,UART_TRIGGER_LEVEL_4_BYTES);

225550pijqzzurz99rurhz

225551eqopjuqpflf5rzfo

实测9个bit3us

3M

总结

从以上测试可以看出,系统跑48MHz的时候,串口最大可以跑3MHz,时钟准确。