STM32 RXNE中断
时间: 2023-10-04 18:09:57 浏览: 142
STM32的RXNE中断是串口接收寄存器非空中断。当接收寄存器中有数据时,RXNE标志位被置位,如果使能了该中断,那么中断服务程序将会被执行。
以下是一个简单的使用USART1的RXNE中断的示例代码:
```c
#include "stm32f10x.h"
#include <stdio.h>
void USART1_IRQHandler(void)
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // RXNE中断
{
char data = USART_ReceiveData(USART1); // 读取接收到的数据
// 处理接收到的数据
}
}
int main(void)
{
USART_InitTypeDef usart_init_struct;
NVIC_InitTypeDef nvic_init_struct;
// 使能USART1时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
// 配置USART1
USART_StructInit(&usart_init_struct);
usart_init_struct.USART_BaudRate = 115200;
USART_Init(USART1, &usart_init_struct);
// 使能USART1 RXNE中断
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
// 配置USART1中断
nvic_init_struct.NVIC_IRQChannel = USART1_IRQn;
nvic_init_struct.NVIC_IRQChannelPreemptionPriority = 0;
nvic_init_struct.NVIC_IRQChannelSubPriority = 0;
nvic_init_struct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvic_init_struct);
// 启动USART1
USART_Cmd(USART1, ENABLE);
while (1)
{
// 主循环
}
}
```
在上面的代码中,我们首先使能了USART1的时钟,并使用USART_StructInit()函数进行了USART1的基本配置。然后我们使能了USART1的RXNE中断,并配置了USART1的中断服务程序。最后启动了USART1。
在USART1中有一个接收寄存器,当它非空时,RXNE标志位被置位。如果使能了RXNE中断,那么当RXNE标志位被置位时,中断服务程序将会被执行。在中断服务程序中,我们使用USART_ReceiveData()函数读取接收到的数据,并进行处理。
阅读全文