打印

串口波特率不同,发送数据长度过长时会自动分包

[复制链接]
8676|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
有没有小华的FAE帮我解答一下:HC32L136的串口0,使用PA10,PA9做串口引脚,在配置为模式3,2400波特率,偶检验下,串口发送数据大于42byte时会自动分为两部分发送,两部分数据发送时间相隔50ms,我更换波特率9600,4800,2400,1200,就换这几个值,小于等于2400成两包发,大于等于4800就是一包发,这个问题咋解决?

使用特权

评论回复
评论
xch 2024-3-4 18:43 回复TA
得看看见证奇迹的代码 

相关帖子

沙发
qgy1007|  楼主 | 2024-3-4 17:33 | 只看该作者

串口波特率不同,发送数据长度过长时会自动分包

例如我通过串口发50字节数据,会分成两部分数据,一部分32字节,一部分剩下的字节,两部分数据相隔50ms

使用特权

评论回复
板凳
zchong| | 2024-3-4 19:25 | 只看该作者
先查软件!

使用特权

评论回复
地板
hjl2832| | 2024-3-5 08:13 | 只看该作者
仔细检查自己的代码,看是不是哪里有时间限制(超时处理类)的操作,这个不关芯片的事。

使用特权

评论回复
5
qgy1007|  楼主 | 2024-3-5 09:13 | 只看该作者
hjl2832 发表于 2024-3-5 08:13
仔细检查自己的代码,看是不是哪里有时间限制(超时处理类)的操作,这个不关芯片的事。 ...

我用的是官方例子代码,轮询发送数据

使用特权

评论回复
6
qgy1007|  楼主 | 2024-3-5 09:15 | 只看该作者
本帖最后由 qgy1007 于 2024-3-5 09:27 编辑


/******************************************************************************
* Include files
******************************************************************************/
#include "ddl.h"
#include "uart.h"
#include "gpio.h"
#include "sysctrl.h"

/******************************************************************************
* Local pre-processor symbols/macros ('#define')                           
******************************************************************************/

/******************************************************************************
* Global variable definitions (declared in header file with 'extern')
******************************************************************************/

/******************************************************************************
* Local type definitions ('typedef')                                         
******************************************************************************/

/******************************************************************************
* Local function prototypes ('static')
******************************************************************************/

/******************************************************************************
* Local variable definitions ('static')                                      *
******************************************************************************/
uint8_t u8TxData[50] = {  
  0xAA,0x55,0xAA,0x55,0xAA,0xAA,0x55,0xAA,0x55,0xAA,
  0xAA,0x55,0xAA,0x55,0xAA,0xAA,0x55,0xAA,0x55,0xAA,
  0xAA,0x55,0xAA,0x55,0xAA,0xAA,0x55,0xAA,0x55,0xAA,
  0xAA,0x55,0xAA,0x55,0xAA,0xAA,0x55,0xAA,0x55,0xAA,
  0xAA,0x55,0xAA,0x55,0xAA,0xAA,0x55,0xAA,0x55,0xAA
};

/*****************************************************************************
* Function implementation - global ('extern') and local ('static')
******************************************************************************/
void App_PortInit(void);
void App_UartCfg(void);

/**
******************************************************************************
** \brief  Main function of project
**
** \return uint32_t return value, if needed
**
** This sample
**
******************************************************************************/
int32_t main(void)
{  
    uint8_t i;
   
    App_PortInit();       //端口初始化
   
    App_UartCfg();        //串口模块配置
   
    while(1)
    {
        if((Uart_GetStatus(M0P_UART1, UartFE))||(Uart_GetStatus(M0P_UART1, UartPE)))  //错误请求
        {
            Uart_ClrStatus(M0P_UART1, UartFE);            //清除帧错误标记
            Uart_ClrStatus(M0P_UART1, UartPE);            //清除奇偶校验错误标记
        }
        if(Uart_GetStatus(M0P_UART1,UartRC))              //接收到数据
        {
            Uart_ClrStatus(M0P_UART1,UartRC);
            u8TxData[0] = Uart_ReceiveData(M0P_UART1);    //接收数据一字节数据后,回复50字节数据
            for(i=0;i<50;i++)
            {
                Uart_SendDataPoll(M0P_UART1,u8TxData); //查询方式发送数据           }
        }
    }
}
//串口引脚配置
void App_PortInit(void)
{
    stc_gpio_cfg_t stcGpioCfg;
   
    DDL_ZERO_STRUCT(stcGpioCfg);
   
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //GPIO外设模块时钟使能
   
    stcGpioCfg.enDir = GpioDirOut;
    Gpio_Init(GpioPortD,GpioPin0,&stcGpioCfg);
    Gpio_SetAfMode(GpioPortD,GpioPin0,GpioAf3); //配置PA09 为UART0 TX
    stcGpioCfg.enDir = GpioDirIn;
    Gpio_Init(GpioPortD,GpioPin1,&stcGpioCfg);
    Gpio_SetAfMode(GpioPortD,GpioPin1,GpioAf3);//配置PA10 为UART0 RX
}

//串口模块配置
void App_UartCfg(void)
{
    stc_uart_cfg_t  stcCfg;
    stc_uart_multimode_t stcMulti;
    stc_uart_baud_t stcBaud;

    DDL_ZERO_STRUCT(stcCfg);
    DDL_ZERO_STRUCT(stcMulti);
    DDL_ZERO_STRUCT(stcBaud);
   
    Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE);//UART0外设模块时钟使能
   
    stcCfg.enRunMode = UartMskMode3;     //模式3
    stcCfg.enStopBit = UartMsk1bit;      //1位停止位
    stcCfg.enMmdorCk = UartMskEven;      //偶校验
    stcCfg.stcBaud.u32Baud = 2400;       //波特率9600
    stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div;         //通道采样分频配置
    stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq();    //获得外设时钟(PCLK)频率值
    Uart_Init(M0P_UART1, &stcCfg);       //串口初始化

    Uart_ClrStatus(M0P_UART1,UartRC);    //清接收请求
    Uart_ClrStatus(M0P_UART1,UartTC);    //清发送请求
    Uart_EnableIrq(M0P_UART1,UartRxIrq); //使能串口接收中断
    Uart_EnableIrq(M0P_UART1,UartTxIrq); //使能串口发送中断

}

/******************************************************************************
* EOF (not truncated)
******************************************************************************/



使用特权

评论回复
7
qgy1007|  楼主 | 2024-3-5 09:15 | 只看该作者

用的官方例程,只改了波特率

使用特权

评论回复
8
qgy1007|  楼主 | 2024-3-5 09:19 | 只看该作者

使用特权

评论回复
9
一叶倾城wwq| | 2024-3-5 09:24 | 只看该作者
楼主哦,并没有分包,不信你用示波器看看,是串口工具分时显示了而已,并没有间隔几十毫秒,你明白吗

使用特权

评论回复
10
qgy1007|  楼主 | 2024-3-5 10:30 | 只看该作者
一叶倾城wwq 发表于 2024-3-5 09:24
楼主哦,并没有分包,不信你用示波器看看,是串口工具分时显示了而已,并没有间隔几十毫秒,你明白吗[em:4: ...

好的,好的

使用特权

评论回复
11
qintian0303| | 2024-3-5 10:35 | 只看该作者
你把时间戳取电看一下试一试,在发送的数据里面加入分行

使用特权

评论回复
12
icecut| | 2024-3-6 11:02 | 只看该作者
上示波器吧。你那工具不可信啊

使用特权

评论回复
13
hjl2832| | 2024-3-7 08:44 | 只看该作者
你这个是串口助手的问题,不是单片机的问题,你看串口助手,都有一个超时的设置,那个就是分包时间设定,比喻这个:
再看这个:

使用特权

评论回复
14
lsc501| | 2024-3-12 12:01 | 只看该作者

串口波特率不同,发送数据长度过长时会自动分包

有中断打断了串口发送函数吧

使用特权

评论回复
15
ayb_ice| | 2024-3-27 17:05 | 只看该作者

串口波特率不同,发送数据长度过长时会自动分包

把要发的数据放在队列里,中断从队列中取数据,即使没发完,队列也可以接收新的数据

使用特权

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

本版积分规则

3

主题

13

帖子

0

粉丝