STM32f103做一个项目,使用串口中断发送数据时,数据出现了断帧,断帧的间隔时间从串口打印log来看,最大的达到40多ms,小的时间间隔也有20ms左右,不知道是不是因为操作系统造成了。

1.系统是用的ucos ii

2.串口使用了串口1 和 2 都是利用串口中断接收和发送

3.部分驱动代码

谢谢各位

/*=======================================================================================================

*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 );

}

}

0

linux 串口 断帧,STM32f103使用串口中断发送数据时出现断帧是什么原因?相关推荐

  1. STM32F103C8T6核心开发板下,采用串口DMA方式向上位机连续发送数据的实例详解

    STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 文章目录 STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 前言 一.DMA应用初步 ...

  2. [译] Linux 网络栈监控和调优:发送数据(2017)

    转载自:http://arthurchiao.art/blog/tuning-stack-tx-zh/ 点击阅读原文 Published at 2018-12-17 | Last Update 202 ...

  3. ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收

    串口发送部分代码: //通过信号量的方法发送数据 void usart1SendData(CPU_INT08U ch) {OS_ERR err;CPU_INT08U isTheFirstCh;OSSe ...

  4. arduino向串口发送数据时掉包_[技术]清楚简单,一种串口触摸屏的开发流程和方法介绍...

    1.什么是串口触摸屏 触摸屏是工业控制上很常见的人机交互部件,很多设备.系统都在使用它,它至少有两个功能:显示,触摸控制. 串口触摸屏是采用串行数据通信协议进行数据交换的触摸屏,具有简单.可靠.易于操 ...

  5. linux 串口读取陀螺仪,stm32读取陀螺仪MPU6050发送数据到串口

    [实例简介] IAR环境下,stm32读取MPU6050数据,发送到串口. [实例截图] [核心代码] 6b42b05e-a094-444f-b033-eda513b6cc49 └── tly01 ├ ...

  6. 串口发送数据,只接收到00的原因之一

    1.环境: STM32F103RCT6 KEIL 5 2.现象: 不管我发送任何类型的数据,在串口助手上显示接收到的都是00, 我头很大,去网上找了别人的代码对比检查. 终于,细心的我发现,原来粗心的 ...

  7. 计算机串口无法发数,单片机向电脑发送数据,为什么串口调试助手收不到数据 求助...

    试试我这个 #include #define uint unsigned int #define uchar unsigned char #define BAUD 9600 #define XTAL ...

  8. Linux网络协议栈:关闭一个还有没发送数据完的TCP连接

    <监视和调整Linux网络协议栈:接收数据> <监控和调整Linux网络协议栈的图解指南:接收数据> <Linux网络 - 数据包的接收过程> <Linux网 ...

  9. 【STM32】-串口开发经验分享-基于RTOS+空闲中断

    目录 1. 概述 2.串口介绍 2.1 原理框图 2.2 RS-232C 2.3 RS-422 2.4 RS-485 2.5 UART 3. STM32 USART介绍 4. CubeMx生成Uart ...

  10. stc 串口收发 c语言,STC12C5A60S2 串口中断接收程序

    原标题:STC12C5A60S2 串口中断接收程序 #define UART0_BUF_LEN 32 int UART1_Recv_count; //接收计数 bit UART1_Overflow_F ...

最新文章

  1. hexo博客更新主题后上传Git操作
  2. 华师大计算机网络中心,华东师范大学 单点登录共享校际资源
  3. 2019BATJ面试题汇总详解:MyBatis+MySQL+Spring+Redis+多线程
  4. BCH涨幅超过146%,势必跟BTC争夺王位?
  5. 【CentOS】如何在线安装pcre?
  6. 基于java+swing+mysql+JFeeChart的企业人力资源管理系统(1)
  7. [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间
  8. BizTalk开发系列(二十二) 开发自定义Map Functoid
  9. Python使用matplotlib可视化模拟班级学生分数柱状图和折线图
  10. Hexo高级教程之代码高亮
  11. [评价体系] 2、层次分析法AHP原理、例题
  12. 模拟电路实现延时功能
  13. OpenV2X 标准整理
  14. 输出流创建txt文件
  15. centos7 小图标_Centos7 桌面图标设置
  16. PHP - 收藏集 - 掘金
  17. 2kids学汉字 android,新2Kids学汉字
  18. PTA 7-113 用switch语句编程百分制成绩转换为五分制成绩
  19. 步进电动机速度调节和方向控制实验
  20. 连接池-DBCPUtils工具类(dbcp)

热门文章

  1. 4.5Python数据处理篇之Matplotlib系列(五)---plt.pie()饼状图
  2. JS开发工具WebStorm使用快捷键
  3. VMware与Hyper-V不兼容
  4. 《深入剖析Tomcat》一3.3 小结
  5. 2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest
  6. 容易忘记的linux命令之rpm
  7. ASV2011中文版本和英文版本的区别
  8. mac头和ip头部详解
  9. Linux设备驱动模型-Kobject
  10. Hurdles of 110m ZOJ - 2972 (简单DP)