串口数据问题

使用RF_PHY 时用到了串口,使用串口是发现接收端只能接收到长字节数据的前8位字节,推断是UART1_ByteTrigCfg(UART_7BYTE_TRIG);中UART_7BYTE_TRIG参数导致的,这个量能变大吗?还是只能接收前8个字节?

还是说是一种可能把长字节拆分成若干8字节发送?那我想要识别数据的第一位和第十位该怎么办?

串口初始化如下:

void Uart_Init(void)
{
    uint8_t len;


    /* 配置串口1:先配置IO口模式,再配置串口 */
    GPIOA_SetBits(GPIO_Pin_9);
    GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);      // RXD-配置上拉输入
    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
    UART1_DefInit();

    UART1_ByteTrigCfg(UART_7BYTE_TRIG);
    trigB = 20;
    UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_LINE_STAT);
    PFIC_EnableIRQ(UART1_IRQn);
}

/*********************************************************************
 * @fn      UART1_IRQHandler
 *
 * @brief   UART1中断函数
 *
 * @return  none
 */
__INTERRUPT
__HIGH_CODE
void UART1_IRQHandler(void)
{
    volatile uint8_t i;
    PRINT("IRQ RIGHT\n");
    switch(UART1_GetITFlag())
    {
        case UART_II_LINE_STAT: // 线路状态错误
        {
            UART1_GetLinSTA();
            break;
        }

        case UART_II_RECV_RDY: // 数据达到设置触发点
            for(i = 0; i != trigB; i++)
            {
               RxBuff[i] = UART1_RecvByte();

            }
            tmos_set_event(taskID, SBP_RF_COMMAND_EVT);
            break;

        case UART_II_RECV_TOUT: // 接收超时,暂时一帧数据接收完成
            i = UART1_RecvString(RxBuff);
            tmos_set_event(taskID, SBP_RF_COMMAND_EVT);
            break;

        case UART_II_THR_EMPTY: // 发送缓存区空,可继续发送
            break;

        case UART_II_MODEM_CHG: // 只支持串口0
            break;

        default:
            break;
    }
}



您好,可以在串口中断服务函数中加上全局数组的缓存,在接收超时后置标志判断接收一串指令完成,之后再去判断第一个字节和第十个字节。缓存方式参考下方博客。

CH582m串口透传程序 - JayWell - 博客园 (cnblogs.com)

image.png

image.png


只有登录才能回复,可以选择微信账号登录