打印

请教HC32L196KCTA 串口0只能发送 无法接收

[复制链接]
3989|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
IchBinMarcel|  楼主 | 2021-8-18 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在使用HC32L196这款芯片进行开发,但是发现UART0 只能发送 不能接收,代码我贴在下面,个位大佬帮我看看问题出在哪里      
      下载视频         

        //uart0 gpio配置
        stc_gpio_cfg_t stcGpioCfg;   
            DDL_ZERO_STRUCT(stcGpioCfg);

            Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);  ///<使能GPIO外设时钟门控开关

        //配置PB8、PB9为串口0
            stcGpioCfg.enDir = GpioDirOut;
        stcGpioCfg.enPu = GpioPuEnable;
        stcGpioCfg.enOD = GpioOdEnable;
            Gpio_Init(GpioPortB,GpioPin8,&stcGpioCfg);
            Gpio_SetAfMode(GpioPortB,GpioPin8,GpioAf7);             ///<配置PB8 为UART0 TX
       
            stcGpioCfg.enDir = GpioDirIn;
        stcGpioCfg.enPu = GpioPuEnable;
            stcGpioCfg.enOD = GpioOdEnable;
            Gpio_Init(GpioPortB,GpioPin9,&stcGpioCfg);
            Gpio_SetAfMode(GpioPortB,GpioPin9,GpioAf7);             ///<配置PB9 为UART0 RX
       
        //uart0配置
        stc_uart_cfg_t  stcCfg;
            stc_uart_baud_t stcBaud;

            DDL_ZERO_STRUCT(stcCfg);
            DDL_ZERO_STRUCT(stcBaud);

            Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,TRUE); ///<使能UART0外设时钟门控开关

            ///<UART Init
            stcCfg.enRunMode        = UartMskMode3;                 ///<模式3
            stcCfg.enStopBit           = UartMsk1bit;                  ///<1bit停止位
            stcCfg.enMmdorCk        = UartMskDataOrAddr;            ///<多机模式时
            stcCfg.stcBaud.u32Baud  = 57600;                       ///<波特率57600
            stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div;              ///<通道采样分频配置
            stcCfg.stcBaud.u32Pclk  = Sysctrl_GetPClkFreq();        ///<获得外设时钟(PCLK)频率值
            Uart_Init(M0P_UART0, &stcCfg);                          ///<串口初始化

            ///<UART中断使能
            Uart_ClrStatus(M0P_UART0,UartRC);                       ///<清接收请求
            Uart_ClrStatus(M0P_UART0,UartTC);                       ///<清接收请求
            Uart_EnableIrq(M0P_UART0,UartRxIrq);                    ///<使能串口接收中断
//        Uart_EnableIrq(M0P_UART0,UartTxIrq);                    ///<使能串口发送中断       
            EnableNvic(UART0_2_IRQn, IrqLevel3, TRUE);              ///<系统中断使能


void Uart0_IRQHandler(void)
{
    if(Uart_GetStatus(M0P_UART0, UartRC))             //UART0数据接收
    {
        Uart_ClrStatus(M0P_UART0, UartRC);            //清中断状态位
        u8RxData[u8RxCnt]=Uart_ReceiveData(M0P_UART0);
        u8RxCnt++;
    }

    if(Uart_GetStatus(M0P_UART0, UartTC))         //UART0数据发送
    {
        Uart_ClrStatus(M0P_UART0, UartTC);        //清中断状态位
    }

}


以上代码我用了串口调试软件,可以正常接收到板子发出来的信息,但是用串口软件向板子发信息,无法进入串口0的接收中断!

而且,对于串口发送函数我也比较疑惑
HC32L196提供了两个串口发送函数
1、en_result_t Uart_SendDataPoll(M0P_UART_TypeDef* UARTx, uint8_t u8Data)
2、en_result_t Uart_SendDataIt(M0P_UART_TypeDef* UARTx, uint8_t u8Data)

在开启串口发送中断的情况下,用第一个函数是发不出去消息的,只能关了发送中断才能正常发
如果想用第二个发送函数,就要开启中断,然后在中断里进行数据的发送,非常的不方便。

各位有没有相似的经验可以知道我一下,我之前都用STM32,第一次用国产的,被搞得有点懵了。。。

使用特权

评论回复

相关帖子

沙发
IchBinMarcel|  楼主 | 2021-8-18 11:26 | 只看该作者

请教HC32L196KCTA 串口0只能发送 无法接收

关于串口发送的问题解决了      
      下载视频         
while (Uart_GetStatus(M0P_UART0, UartTxe)==FALSE); //等待上次传输完成
Uart_SendDataIt(M0P_UART0, (uint8_t)USART0_TX_BUF[j]);


将UartTxe用了UartTC,导致卡死在while循环,换成UartTxe就好了

使用特权

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

本版积分规则

3

主题

8

帖子

0

粉丝