[技术问答]

HC32L110C4PA串口配置偶校验后,连续收发后,发送数据异常

[复制链接]
1036|5
手机看帖
扫描二维码
随时随地手机跟帖
hzqy110|  楼主 | 2020-6-17 00:48 | 显示全部楼层 |阅读模式
以下是设置void USER_Uart_IO_Init(void)
{
        uint16_t timer;
        uint32_t pclk;
       
        stc_uart_config_t  stcConfig;
        stc_uart_irq_cb_t stcUartIrqCb;
        stc_uart_multimode_t stcMulti;
        stc_uart_baud_config_t stcBaud;
        stc_bt_config_t stcBtConfig;
       
//        en_uart_mmdorck_t enTb8;
        DDL_ZERO_STRUCT(stcUartIrqCb);
        DDL_ZERO_STRUCT(stcMulti);
        DDL_ZERO_STRUCT(stcBaud);
        DDL_ZERO_STRUCT(stcBtConfig);
       
       
        Gpio_InitIOExt(1,4,GpioDirOut,TRUE,FALSE,FALSE,FALSE);
        Gpio_InitIOExt(1,5,GpioDirOut,TRUE,FALSE,FALSE,FALSE);
       
        //ͨµÀ¶Ë¿ÚÅäÖÃ
        Gpio_SetFunc_UART0TX_P14();
        Gpio_SetFunc_UART0RX_P15();

        //ÍâÉèʱÖÓÅäÖÃ
        Clk_SetPeripheralGate(ClkPeripheralBt,TRUE);
        Clk_SetPeripheralGate(ClkPeripheralUart0,TRUE);

        stcUartIrqCb.pfnRxIrqCb = RxIntCallback;//½ÓÊÕÖжϺ¯ÊýÈë¿Ú
        stcUartIrqCb.pfnTxIrqCb = NULL;//·¢ËÍÖжϺ¯ÊýÈë¿Ú
        stcUartIrqCb.pfnRxErrIrqCb = ErrIntCallback;//½ÓÊÕ´íÎóÖжϺ¯ÊýÈë¿Ú
        stcConfig.pstcIrqCb = &stcUartIrqCb;//ÖжϷþÎñº¯Êý
        stcConfig.bTouchNvic = TRUE;//ÖжÏʹÄÜ
       
        stcConfig.enRunMode = UartMode3;
        stcMulti.enMulti_mode = UartNormal;//Õý³£Ä£Ê½
        stcConfig.pstcMultiMode = &stcMulti;
       
//       
//        enTb8 = UartEven;
//        Uart_SetMMDOrCk(UARTCH0,Even);//ÉèÖÃżУÑé
       
       
        stcBaud.bDbaud = 0u;
        stcBaud.u32Baud = 9600u;
        stcBaud.u8Mode = UartMode3; //¼ÆË㲨ÌØÂÊÐèҪģʽ²ÎÊý
        pclk = Clk_GetPClkFreq();
        timer=Uart_SetBaudRate(UARTCH0,pclk,&stcBaud);

        stcBtConfig.enMD = BtMode2;
        stcBtConfig.enCT = BtTimer;
        Bt_Init(TIM0, &stcBtConfig);//µ÷ÓÃbasetimer1ÉèÖú¯Êý²úÉú²¨ÌØÂÊ
        Bt_ARRSet(TIM0,timer);
        Bt_Cnt16Set(TIM0,timer);
        Bt_Run(TIM0);
       
        Uart_Init(UARTCH0, &stcConfig);
        Uart_EnableIrq(UARTCH0,UartRxIrq);
        Uart_ClrStatus(UARTCH0,UartRxFull);//Çå³ý½ÓÊÕ±ê־λ
        Uart_EnableFunc(UARTCH0,UartRx);
}

/*******************************************************/
void Send_Data(void)
{
        if(COMM_Struct.TxSendMark)
                {
                        COMM_Struct.TxSendMark = 0;
                        for(u8 i=0;i<6;i++)
                                {
                                        Dis();
                                        Uart_SetTb8(UARTCH0,Even,COMM_Struct.TxBuff[i]);
                                        Uart_SendData(UARTCH0,COMM_Struct.TxBuff[i]);
                                }
                        Uart_ClrStatus(UARTCH0,UartTxEmpty);
                }
}


软件持续测试发送接收到的数组数据后,会出现接收数据和发送数据数组字节错位情况是什么原因。
比如接收数据是01 02 03 04 05 06
串口助手接收到的反馈数据是02 03 04 05 06 01
仿真时候看不出异常,比如仿真时候Uart_SendData(UARTCH0,COMM_Struct.TxBuff[i]);内COMM_Struct.TxBuff[i]数据为01,但是串口助手接收到的数据却是为06
单片机重启后运行是正常状态,只有在连续收发测试一段时间后会出现这种异常,是什么原因照成的?

使用特权

评论回复
hzqy110|  楼主 | 2020-6-17 19:27 | 显示全部楼层
没人遇到过吗

使用特权

评论回复
wkei007| | 2020-6-23 16:40 | 显示全部楼层
我用072碰到过一次单片机发送,上位机接收一切正常,但是上位机发送,MCU接收的数据一直有异常,硬件电路反复检查没有问题,最终换了一颗新的MCU,接收和发送都正常了。我也比较郁闷不知道啥情况。

使用特权

评论回复
hzqy110|  楼主 | 2020-7-9 17:28 | 显示全部楼层
wkei007 发表于 2020-6-23 16:40
我用072碰到过一次单片机发送,上位机接收一切正常,但是上位机发送,MCU接收的数据一直有异常,硬件电路反 ...

我是因为结构体数据对齐的关系,重新整理结构体就好了

使用特权

评论回复
rgbgirl| | 2021-3-5 11:12 | 显示全部楼层
这个问题我也遇到了,还没解决呢~~期待中

使用特权

评论回复
liangshuang95| | 2021-3-9 20:56 | 显示全部楼层
换成奇校验试试

使用特权

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

本版积分规则

11

主题

26

帖子

0

粉丝