linux 串口 断帧,STM32f103使用串口中断发送数据时出现断帧是什么原因?
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使用串口中断发送数据时出现断帧是什么原因?相关推荐
- STM32F103C8T6核心开发板下,采用串口DMA方式向上位机连续发送数据的实例详解
STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 文章目录 STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 前言 一.DMA应用初步 ...
- [译] Linux 网络栈监控和调优:发送数据(2017)
转载自:http://arthurchiao.art/blog/tuning-stack-tx-zh/ 点击阅读原文 Published at 2018-12-17 | Last Update 202 ...
- ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收
串口发送部分代码: //通过信号量的方法发送数据 void usart1SendData(CPU_INT08U ch) {OS_ERR err;CPU_INT08U isTheFirstCh;OSSe ...
- arduino向串口发送数据时掉包_[技术]清楚简单,一种串口触摸屏的开发流程和方法介绍...
1.什么是串口触摸屏 触摸屏是工业控制上很常见的人机交互部件,很多设备.系统都在使用它,它至少有两个功能:显示,触摸控制. 串口触摸屏是采用串行数据通信协议进行数据交换的触摸屏,具有简单.可靠.易于操 ...
- linux 串口读取陀螺仪,stm32读取陀螺仪MPU6050发送数据到串口
[实例简介] IAR环境下,stm32读取MPU6050数据,发送到串口. [实例截图] [核心代码] 6b42b05e-a094-444f-b033-eda513b6cc49 └── tly01 ├ ...
- 串口发送数据,只接收到00的原因之一
1.环境: STM32F103RCT6 KEIL 5 2.现象: 不管我发送任何类型的数据,在串口助手上显示接收到的都是00, 我头很大,去网上找了别人的代码对比检查. 终于,细心的我发现,原来粗心的 ...
- 计算机串口无法发数,单片机向电脑发送数据,为什么串口调试助手收不到数据 求助...
试试我这个 #include #define uint unsigned int #define uchar unsigned char #define BAUD 9600 #define XTAL ...
- Linux网络协议栈:关闭一个还有没发送数据完的TCP连接
<监视和调整Linux网络协议栈:接收数据> <监控和调整Linux网络协议栈的图解指南:接收数据> <Linux网络 - 数据包的接收过程> <Linux网 ...
- 【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 ...
- stc 串口收发 c语言,STC12C5A60S2 串口中断接收程序
原标题:STC12C5A60S2 串口中断接收程序 #define UART0_BUF_LEN 32 int UART1_Recv_count; //接收计数 bit UART1_Overflow_F ...
最新文章
- hexo博客更新主题后上传Git操作
- 华师大计算机网络中心,华东师范大学 单点登录共享校际资源
- 2019BATJ面试题汇总详解:MyBatis+MySQL+Spring+Redis+多线程
- BCH涨幅超过146%,势必跟BTC争夺王位?
- 【CentOS】如何在线安装pcre?
- 基于java+swing+mysql+JFeeChart的企业人力资源管理系统(1)
- [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间
- BizTalk开发系列(二十二) 开发自定义Map Functoid
- Python使用matplotlib可视化模拟班级学生分数柱状图和折线图
- Hexo高级教程之代码高亮
- [评价体系] 2、层次分析法AHP原理、例题
- 模拟电路实现延时功能
- OpenV2X 标准整理
- 输出流创建txt文件
- centos7 小图标_Centos7 桌面图标设置
- PHP - 收藏集 - 掘金
- 2kids学汉字 android,新2Kids学汉字
- PTA 7-113 用switch语句编程百分制成绩转换为五分制成绩
- 步进电动机速度调节和方向控制实验
- 连接池-DBCPUtils工具类(dbcp)
热门文章
- 4.5Python数据处理篇之Matplotlib系列(五)---plt.pie()饼状图
- JS开发工具WebStorm使用快捷键
- VMware与Hyper-V不兼容
- 《深入剖析Tomcat》一3.3 小结
- 2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest
- 容易忘记的linux命令之rpm
- ASV2011中文版本和英文版本的区别
- mac头和ip头部详解
- Linux设备驱动模型-Kobject
- Hurdles of 110m ZOJ - 2972 (简单DP)