问答

汇集网友智慧,解决技术难题

21ic问答首页 - 华大 mcu ,串口数据无法准确收发,求助:?

MCU 串口数据 单片机 时钟 晶振

华大 mcu ,串口数据无法准确收发,求助:?

noparkinghere2020-12-25


mcu 型号 HC32L176JATA-LQ48,使用单片机内部晶振,串口无法正确输出数据?


反复发送 0x68 ,无法正确接收到值,示波器上看,时钟差的也比较大。



回答 +关注 2
7178人浏览 13人回答问题 分享 举报
13 个回答
  • 这种情况有两种,第一是你配置的内部时钟的问题,在配置之初就配置错了,需要仔细检查,第二就是看一下配置串口的波特率是多少,具体对比一下用户手册中的寄存器部分查看一下,应该能解决问题
  • 是不是内部时钟偏差太大,导致波特率不准确。
  • 看一下 串口配置是否正确,附上串口0的配置,仅供参考:
    void UART0_Init(uint32_t bound)
    {
        stc_gpio_cfg_t stcGpioCfg;
        stc_uart_cfg_t    stcCfg;

        DDL_ZERO_STRUCT(stcGpioCfg);
        DDL_ZERO_STRUCT(stcCfg);

        Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //使能GPIO模块时钟

        ///<TX
        stcGpioCfg.enDir = GpioDirOut;
        Gpio_Init(GpioPortA, GpioPin9, &stcGpioCfg);
        Gpio_SetAfMode(GpioPortA, GpioPin9, GpioAf1);          //配置PA02 端口为URART1_TX

        ///<RX
        stcGpioCfg.enDir = GpioDirIn;
        Gpio_Init(GpioPortA, GpioPin10, &stcGpioCfg);
        Gpio_SetAfMode(GpioPortA, GpioPin10, GpioAf1);          //配置PA03 端口为URART1_RX

        Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,TRUE);///<使能uart1模块时钟

        stcCfg.enRunMode        = UartMskMode1;          ///<模式3
        stcCfg.enStopBit        = UartMsk1bit;           ///<1bit停止位
    //    stcCfg.enMmdorCk        = UartMskEven;           ///<偶检验
        stcCfg.stcBaud.u32Baud  = bound;                  ///<波特率9600
        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);             ///<使能串口接收中断
        EnableNvic(UART0_2_IRQn, IrqLevel0, TRUE);       ///<系统中断使能
    }
  • 看一下串口初始化函数对波特率的初始化,一般都有公式计算的,检查一下值对不对,有些是会有问题。但是内部时钟应该不会偏差太大
  • 应该是你的波特率误差
  • 看看波形是否毛刺,在其他国产MCU出现过毛刺引起UART挂了,需要复位,不知这个是否一个情况。
  • 如果实在无法解决就找华大技术支持吧
  • 本帖最后由 martinhu 于 2020-12-26 23:40 编辑

    之前有过一个中间版本的驱动库,system init函数里面没有这段代码
    913595fe7595e43ab5.png
    debug状态如果你要跑默认的时钟,main开头添加这句
    Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz);
    如果断开debug的话,应该是没问题的。

    或者去官网更新一下驱动库
  • 你初始化时钟了吗?
12下一页

您需要登录后才可以回复 登录 | 注册