完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在使用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 ); } } |
|
相关推荐
6个回答
|
|
被更高等级的中断拦截了。
|
|
|
|
加个互斥信号量就可以了
|
|
|
|
系统是不是有其他更高优先级的中断发送。
|
|
|
|
没有用过103跑系统的
|
|
|
|
是不是有高优先级的中断打断了
|
|
|
|
FX1N PLC 源代码没有用过103跑系统的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
991 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
970 浏览 2 评论
2080 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1177 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 22:48 , Processed in 0.677639 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号