串口与串口通信时,使用相同串口并都开启中断,中断如何配置
时间: 2023-05-22 13:03:35 浏览: 121
串口通信,采用中断方式实现
对于同一串口进行通信时,需要将该串口的中断处理函数配置为接收和发送数据的中断处理函数。在接收数据时,需要开启数据接收中断(RXNEIE),在发送数据时,需要开启数据发送中断(TCIE)。此外,在配置串口时,需要设置相应的波特率、数据位、停止位和校验位等参数。以下为示例代码:
void USART1_IRQHandler(void)
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // 接收中断处理
{
// 处理接收到的数据
USART_ClearITPendingBit(USART1, USART_IT_RXNE); // 清除接收中断标志位
}
else if (USART_GetITStatus(USART1, USART_IT_TC) != RESET) // 发送中断处理
{
// 处理发送完成
USART_ClearITPendingBit(USART1, USART_IT_TC); // 清除发送中断标志位
}
}
void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_InitStructure.USART_BaudRate = 115200; // 设置波特率为115200
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 数据位8位
USART_InitStructure.USART_StopBits = USART_StopBits_1; // 停止位1位
USART_InitStructure.USART_Parity = USART_Parity_No; // 无校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 支持接收和发送
USART_Init(USART1, &USART_InitStructure);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 开启接收中断
USART_ITConfig(USART1, USART_IT_TC, ENABLE); // 开启发送中断
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_Cmd(USART1, ENABLE);
}
在上述代码中,串口使用的是USART1,波特率为115200,数据位为8位,停止位为1位,无校验位。接收中断处理函数和发送中断处理函数分别处理接收和发送完成的事件。在USART_Configuration函数中,开启了接收中断和发送中断,并且配置了中断优先级为0。最后,使能了USART1串口。
阅读全文