打印
[技术问答]

玄宇芯-HC32L136板子 串口接收数据串问题

[复制链接]
1072|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jx_207|  楼主 | 2020-10-19 21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在使用玄宇芯的HC32L136的DEMO板,在一直官方的SDK uart_int例子,自发自收,第一个字节能正常收到,后面的就不对了,请问有人碰到过吗?

使用特权

评论回复
沙发
jx_207|  楼主 | 2020-10-19 21:04 | 只看该作者
void TxIntCallback(void)
{
     
}


void uart_send_byte(uint8_t by);

void RxIntCallback(void)
{
        uint8_t d;  
        uint8_t rxBuffer[256] ={0};
        //Uart_ClrStatus(UARTCH1,UartRC);
        d=Uart_ReceiveData(UARTCH1);
       
        uart_send_byte(d);
           
}

void ErrIntCallback(void)
{
  
}
void PErrIntCallBack(void)
{
}
void CtsIntCallBack(void)
{
}

void Uart_PortInit(void)
{
    stc_gpio_config_t stcGpioCfg;
    DDL_ZERO_STRUCT(stcGpioCfg);
    stcGpioCfg.enDir = GpioDirOut;
    Gpio_Init(GpioPortA,GpioPin2,&stcGpioCfg);
    Gpio_SetAfMode(GpioPortA,GpioPin2,GpioAf1);//TX
    stcGpioCfg.enDir = GpioDirIn;
    Gpio_Init(GpioPortA,GpioPin3,&stcGpioCfg);
    Gpio_SetAfMode(GpioPortA,GpioPin3,GpioAf1);//RX
}

void uart_init(void)
{  
        uint16_t u16Scnt = 0;
        stc_gpio_config_t stcGpioCfg;
        stc_uart_config_t  stcConfig;
        stc_uart_irq_cb_t stcUartIrqCb;
        stc_uart_multimode_t stcMulti;
        stc_uart_baud_t stcBaud;

        en_uart_mmdorck_t enTb8;


        DDL_ZERO_STRUCT(stcConfig);
        DDL_ZERO_STRUCT(stcUartIrqCb);
        DDL_ZERO_STRUCT(stcMulti);
        DDL_ZERO_STRUCT(stcBaud);
   
            Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);//使能GPIO模块时钟
            Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE);//使能uart1模块时钟

        Uart_PortInit();
       
        stcUartIrqCb.pfnRxIrqCb   = RxIntCallback;//中断入口地址
        stcUartIrqCb.pfnTxIrqCb   = TxIntCallback;
        stcUartIrqCb.pfnRxFEIrqCb = ErrIntCallback;
        stcUartIrqCb.pfnPEIrqCb   = PErrIntCallBack;
        stcUartIrqCb.pfnCtsIrqCb  = CtsIntCallBack;
        stcConfig.pstcIrqCb = &stcUartIrqCb;
        stcConfig.bTouchNvic = TRUE;
  
        if(TRUE == stcConfig.bTouchNvic)
        {
                EnableNvic(UART1_IRQn,IrqLevel3,TRUE);
        }

        stcConfig.enRunMode = UartMode3;//模式3
        stcConfig.enStopBit = Uart1bit;  //1bit停止位

        stcMulti.enMulti_mode = UartNormal;//正常工作模式
        Uart_SetMultiMode(UARTCH1,&stcMulti);//多主机单独配置
        enTb8 = UartDataOrAddr;//偶校验
        Uart_SetMMDOrCk(UARTCH1,enTb8);

        Uart_Init(UARTCH1, &stcConfig);//串口初始化

        Uart_SetClkDiv(UARTCH1,Uart8Or16Div);//采样分频
        stcBaud.u32Pclk = Sysctrl_GetPClkFreq();
        stcBaud.enRunMode = UartMode3;
        stcBaud.u32Baud = 9600;
        u16Scnt = Uart_CalScnt(UARTCH1,&stcBaud);//波特率计算
        Uart_SetBaud(UARTCH1,u16Scnt);//波特率设置

        Uart_ClrStatus(UARTCH1,UartRC);//清接收请求
        Uart_EnableIrq(UARTCH1,UartRxIrq);//使能串口中断  
        Uart_EnableFunc(UARTCH1,UartRx);//使能收发

}

void uart_send_byte(uint8_t by)
{
        Uart_SendData(UARTCH1, by);
}

使用特权

评论回复
板凳
jinglixixi| | 2020-10-21 10:38 | 只看该作者
是否是因为接收后没释放,或没加一个小的延时使其相应有误。

使用特权

评论回复
地板
jx_207|  楼主 | 2020-10-31 16:57 | 只看该作者
换了个SDK,莫名好了

使用特权

评论回复
5
lxs0026| | 2020-10-31 21:34 | 只看该作者
sdk的问题吗?

使用特权

评论回复
6
lxs0026| | 2020-10-31 21:36 | 只看该作者

使用特权

评论回复
7
六年级| | 2020-11-1 21:42 | 只看该作者
我这边测试时候也是的,发送字符串的时候,中间总有几个字节是丢失的

使用特权

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

本版积分规则

6

主题

33

帖子

0

粉丝