wm1006 发表于 2019-6-22 10:07

请赐予一个HC32L110 UART模式2的样例。

martinhu 发表于 2019-6-25 19:37

L110的UART模式2的波特率是不可编程的,也不需要定时器,是根据当前主频计算得到,如下公式

而且模式2的数据格式为:起始位、停止位、8个数据位,还有一个TB8或者RB8


样例是串口助手先发送6个字节,MCU收到6个字节之后,往串口助手回复6个字节



uint8_t u8RxData;
uint8_t u8RxRB8;
uint8_t u8RxCnt=0;
uint8_t RxFinished;

uint8_t u8TxData;
uint8_t u8TxTB8;
uint8_t u8TxCnt=0;


void INTHanlder_UART0()
{
    //Uart_IRQHandler(0);

    if(1 == M0P_UART0->ISR_f.RI)
    {
      u8RxData = M0P_UART0->SBUF_f.SBUF;//接收数据
      u8RxRB8 = M0P_UART0->SCON_f.RB8;   //接收RB8位

      u8TxData = u8RxData;//TX存储RX数据,用于返回相同的接收数据,仅为演示

      u8RxCnt++;
      if(u8RxCnt >= 6)
      {
            u8RxCnt = 0;
            RxFinished = 1;
      }

      M0P_UART0->ICR_f.RICLR = 0;
    }
}

int32_t main(void)
{   
    //Clk_SwitchTo(ClkRCL);
    //Clk_SetRCHFreq(ClkFreq24Mhz);
    //Clk_SwitchTo(ClkRCH);

    M0P_CLOCK->PERI_CLKEN_f.BASETIM = 1;
    M0P_CLOCK->PERI_CLKEN_f.UART0   = 1;
    M0P_CLOCK->PERI_CLKEN_f.GPIO    = 1;

    Gpio_SetFunc_UART0TX_P35();
    Gpio_SetFunc_UART0RX_P36();

    M0P_UART0->SCON_f.DBAUD = 0;    //单倍波特率
    //M0P_UART0->SCON_f.DBAUD = 1;      //双倍波特率
    /*
    BaudRate = ((SCON_f.DBAUD + 1) * freq)/ 64

    因为freq = 4M,所以波特率为62500
    */

    //UART初始化
    M0P_UART0->SCON_f.SM01 = 0x2;   //模式2
    M0P_UART0->SCON_f.SM2= 0;       //多主机通信disable

    M0P_UART0->ICR_f.RICLR = 0;
    M0P_UART0->ICR_f.TICLR = 0;   
    M0P_UART0->SCON_f.TIEN = 0;   //发送中断不使能
    M0P_UART0->SCON_f.RIEN = 1;   //接受中断使能
    EnableNvic(UART0_IRQn, 3u, TRUE);

    M0P_UART0->SCON_f.REN = 1;

    while(1)
    {
      if(RxFinished == 1)   //接收6个字节后,返回6个字节
      {

          for(u8TxCnt = 0; u8TxCnt < 6; u8TxCnt++)
          {
            M0P_UART0->SCON_f.TB8 = u8TxTB8;//TB8位,根据需要在发送前 编程每一个待发送字节的TB8位,此处仅仅是演示
            M0P_UART0->SBUF_f.SBUF = u8TxData;//查询发送
            while(0 == M0P_UART0->ISR_f.TI);
            M0P_UART0->ICR_f.TICLR = 0;
          }

          RxFinished = 0;
      }
    }
}

wm1006 发表于 2019-7-16 07:46

martinhu 发表于 2019-6-25 19:37
L110的UART模式2的波特率是不可编程的,也不需要定时器,是根据当前主频计算得到,如下公式

而且模式2的数 ...

感谢支持,

cheng_5230 发表于 2019-8-12 11:07

页: [1]
查看完整版本: 请赐予一个HC32L110 UART模式2的样例。