打印
[STM32F1]

操作系统造成的?

[复制链接]
310|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyf部长|  楼主 | 2022-7-8 21:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用STM32f103做一个项目,使用串口中断发送数据时,数据出现了断帧,断帧的间隔时间从串口打印log来看,最大的达到40多ms,小的时间间隔也有20ms左右,不知道是不是因为操作系统造成

使用特权

评论回复
沙发
wuhany| | 2022-7-8 21:24 | 只看该作者
楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
板凳
zyf部长|  楼主 | 2022-7-8 21:27 | 只看该作者
1.系统是用的ucos ii
2.串口使用了串口1 和 2 都是利用串口中断接收和发送
3.部分驱动代码

使用特权

评论回复
地板
chuxh| | 2022-7-8 21:29 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
5
zyf部长|  楼主 | 2022-7-8 21:36 | 只看该作者

/*=======================================================================================================
*Function:  Bsp_UartNVIC_Config( ) =>
*Input   :  *Uart
*Output  :  None
========================================================================================================*/
void Bsp_UartNVIC_Config( UART_Def *Uart  )
{
    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_InitStructure.NVIC_IRQChannel = Uart->UARTx_IRQn;                      //Enable the USARTy Interrupt
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = Uart->PreemPriority;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = Uart->SubPriority;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}
/*=======================================================================================================
*Function:  Bsp_UartConfig( ) =>
*Input   :  *Uart
*Output  :  None
========================================================================================================*/
void Bsp_UartConfig( UART_Def *Uart )
{
    USART_InitTypeDef USART_InitStructure1;
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd( Uart->RCC_PinPort, ENABLE );                        // config USARTx Pin clock
     
    if( Uart->USARTx == USART2 || Uart->USARTx == USART3 )                      // config USARTx clock
    {
      RCC_APB1PeriphClockCmd( Uart->RCC_Uartx, ENABLE );
    }
    else if( Uart->USARTx == USART1 )                                          // config USARTx clock
    {
      RCC_APB2PeriphClockCmd( Uart->RCC_Uartx, ENABLE );
    }

    GPIO_InitStructure.GPIO_Pin = Uart->Rx_Pinx;                                // Configure USARTy Rx as input floating
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init( Uart->PinPort, &GPIO_InitStructure );
   
    GPIO_InitStructure.GPIO_Pin = Uart->Tx_Pinx;                                //Configure USARTy Tx as alternate function push-pull
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init( Uart->PinPort, &GPIO_InitStructure );
   
    USART_InitStructure1.USART_BaudRate = Baud_Table[ Uart->Baud_Rate ];        //USART1 mode config
    USART_InitStructure1.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure1.USART_StopBits = USART_StopBits_1;
    USART_InitStructure1.USART_Parity = Parity_Table[ Uart->Parity ] ;
    USART_InitStructure1.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure1.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    USART_Init( Uart->USARTx, &USART_InitStructure1 );

    USART_ITConfig( Uart->USARTx, USART_IT_RXNE , ENABLE );
    USART_ITConfig( Uart->USARTx, USART_IT_IDLE , ENABLE );
    USART_ITConfig( Uart->USARTx, USART_IT_TXE , DISABLE );   
   
    USART_Cmd( Uart->USARTx, ENABLE );
   
}
/*=======================================================================================================
*Function:  Bsp_UartRingSend( ) => USARTx send data from ring buff
*Input   :  *Uart, data
*Output  :  None
========================================================================================================*/
void Bsp_UartIntRingSend( UART_Def *Uart )
{
    uint8_t data;
      
    if( Get_bytes_count( &Uart->T_RingBuff ) != 0 )
    {
#if RS485_EN_USE == true
      RS485_TX_EN();
#endif
      
      Read_ring_buffer( &Uart->T_RingBuff, &data, 1 );
      Bsp_UartSendData( Uart, data );
      
      if( Uart->TxBusy == false )
      {
        Uart->TxBusy = true;
        USART_ITConfig( Uart->USARTx, USART_IT_TXE , ENABLE );
      }
    }
    else
    {
#if RS485_EN_USE == true      
      g_Time3Count.rxdelay = RS485_RxDelayTable[ Uart->Baud_Rate ];        
#endif
      Uart->TxBusy = false;
      USART_ITConfig( Uart->USARTx, USART_IT_TXE , DISABLE );
    }
}

使用特权

评论回复
6
xxrs| | 2022-7-8 21:38 | 只看该作者
被更高等级的中断拦截了。

使用特权

评论回复
7
jlyuan| | 2022-7-8 21:40 | 只看该作者
加个互斥信号量就可以了

使用特权

评论回复
8
jlyuan| | 2022-7-8 21:44 | 只看该作者
系统是不是有其他更高优先级的中断发送。

使用特权

评论回复
9
huangchui| | 2022-7-8 21:45 | 只看该作者
没有用过103跑系统的

使用特权

评论回复
10
zyf部长|  楼主 | 2022-7-8 21:47 | 只看该作者
其实还是不大明白,我再琢磨琢磨吧,多谢了哈先

使用特权

评论回复
11
tpgf| | 2022-8-2 15:09 | 只看该作者
楼主是什么系统啊

使用特权

评论回复
12
qcliu| | 2022-8-2 15:18 | 只看该作者
估计和操作系统无关

使用特权

评论回复
13
drer| | 2022-8-2 15:25 | 只看该作者
可能是中断优先级的问题

使用特权

评论回复
14
coshi| | 2022-8-2 15:32 | 只看该作者
应该和系统的关系不大

使用特权

评论回复
15
kxsi| | 2022-8-2 15:44 | 只看该作者
数据处理有问题

使用特权

评论回复
16
wiba| | 2022-8-2 15:51 | 只看该作者
有可能是接收方有问题

使用特权

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

本版积分规则

694

主题

7102

帖子

8

粉丝