stm32串口中断收发数据环形缓冲区的设计
2016-09-03 20:23
435 查看
[cpp] view
plain copy
/*******************************************************************************
* Function Name : USART2_IRQHandler
* Description : This function handles USART2 global interrupt request.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void USART2_IRQHandler(void)
{
BYTE bTByte;
WORD wTPsn;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //串口2接收中断
{
/* Read one byte from the receive data register */
bTByte = (USART_ReceiveData(USART2));
wTPsn = W_InSerial2;
if(++wTPsn == MAX_SERIAL_LEN2) wTPsn = 0;//修改指针边界
if(wTPsn != W_OutSerial2) //队列没有满的情况下
{
B_SerialQueue2[W_InSerial2] = bTByte;
W_InSerial2 = wTPsn;
}
/* Clear the USART2 Receive interrupt */
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
if(USART_GetITStatus(USART2,USART_IT_TXE)){ //串口2发送中断
//此处加入发送串口数据组帧处理
/* Clear the USART2 Receive interrupt */
USART_ClearITPendingBit(USART2, USART_IT_TXE);
}
}
判断串口是接收中断,还是发送中断,不能
[cpp] view
plain copy
else if(USART_GetITStatus(USART2,USART_IT_TXE)){ //串口2发送中断
只能
[cpp] view
plain copy
if(USART_GetITStatus(USART2,USART_IT_TXE)){ //串口2发送中断
因为如果全双工时是同时收发, 这是会不好处理。
stm32串口中断收发数据环形缓冲区的设计,这里采用的是环形队列做缓冲区。
--> stm32系统初始化要初始化哪些内容?
一般是时钟>中断>外设
不过stm32初始化之后外设基本全关了,用哪个外设需要先开相应外设的时钟
plain copy
/*******************************************************************************
* Function Name : USART2_IRQHandler
* Description : This function handles USART2 global interrupt request.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void USART2_IRQHandler(void)
{
BYTE bTByte;
WORD wTPsn;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //串口2接收中断
{
/* Read one byte from the receive data register */
bTByte = (USART_ReceiveData(USART2));
wTPsn = W_InSerial2;
if(++wTPsn == MAX_SERIAL_LEN2) wTPsn = 0;//修改指针边界
if(wTPsn != W_OutSerial2) //队列没有满的情况下
{
B_SerialQueue2[W_InSerial2] = bTByte;
W_InSerial2 = wTPsn;
}
/* Clear the USART2 Receive interrupt */
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
if(USART_GetITStatus(USART2,USART_IT_TXE)){ //串口2发送中断
//此处加入发送串口数据组帧处理
/* Clear the USART2 Receive interrupt */
USART_ClearITPendingBit(USART2, USART_IT_TXE);
}
}
判断串口是接收中断,还是发送中断,不能
[cpp] view
plain copy
else if(USART_GetITStatus(USART2,USART_IT_TXE)){ //串口2发送中断
只能
[cpp] view
plain copy
if(USART_GetITStatus(USART2,USART_IT_TXE)){ //串口2发送中断
因为如果全双工时是同时收发, 这是会不好处理。
stm32串口中断收发数据环形缓冲区的设计,这里采用的是环形队列做缓冲区。
--> stm32系统初始化要初始化哪些内容?
一般是时钟>中断>外设
不过stm32初始化之后外设基本全关了,用哪个外设需要先开相应外设的时钟
相关文章推荐
- stm32串口中断收发数据环形缓冲区的设计
- STM32使用DMA加串口空闲中断接收数据
- stm32 实现串口中断接收浮点型、整型数据
- stm32-串口使用IDLE中断接受不定长数据方法
- STM32使用串口中断发送和接受数据
- STM32学习笔记之-串口中断接收不定数据buff
- STM32串口DMA方式接收数据,类似环形FIFO
- 【连载】【STM32神舟III号实验例程】串口收发—中断方式(5)
- stm32串口DMA收发,可以接收不定长数据,格式化输出。
- STM32使用串口IDLE中断的两种接收不定长数据的方式
- STM32串口使用IDLE中断接收不定长数据原理与源程序
- STM32串口环形缓冲区
- STM32 串口 空闲中断接收不定长数据
- stm32的串口空闲中断接收数据
- STM32串口DMA方式接收数据。类似环形FIFO。超省CPU资源!
- 【STM32 IIC详解】stm32 IIC从机模式(中断方式收发数据)
- 初识stm32-----串口1的中断收发
- STM32—无需中断来实现使用DMA接收串口数据(原创)
- STM32—无需中断来实现使用DMA接收串口数据
- STM32利用串口空闲中断在串口DMA配置下接收变长数据