打印
[综合信息]

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

[复制链接]
1552|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wm1006|  楼主 | 2019-6-22 10:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

使用特权

评论回复
沙发
martinhu| | 2019-6-25 19:37 | 只看该作者
L110的UART模式2的波特率是不可编程的,也不需要定时器,是根据当前主频计算得到,如下公式

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


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



uint8_t u8RxData[6];
uint8_t u8RxRB8;
uint8_t u8RxCnt=0;
uint8_t RxFinished;

uint8_t u8TxData[6];
uint8_t u8TxTB8;
uint8_t u8TxCnt=0;


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

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

        u8TxData[u8RxCnt] = u8RxData[u8RxCnt];  //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[u8TxCnt];  //查询发送
            while(0 == M0P_UART0->ISR_f.TI);
            M0P_UART0->ICR_f.TICLR = 0;
          }

          RxFinished = 0;
        }
    }
}

HC32L110_DDL_Rev1.0.2_UART0_Mode2_INTRx_PollTx.zip

502.59 KB

使用特权

评论回复
评论
je段 2019-6-25 19:48 回复TA
专业 
板凳
wm1006|  楼主 | 2019-7-16 07:46 | 只看该作者
martinhu 发表于 2019-6-25 19:37
L110的UART模式2的波特率是不可编程的,也不需要定时器,是根据当前主频计算得到,如下公式

而且模式2的数 ...

感谢支持,

使用特权

评论回复
地板
cheng_5230| | 2019-8-12 11:07 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

18

帖子

0

粉丝