STM 32 串口中断设置

我们基于之前的串口配置的那篇文章 来完成今天使用串口中断来控制led 灯的亮灭

首先我们要知道为什么要使用中断
使用中断 能高效的去执行程序,不会一直占用MCU的资源。
对于中断的介绍 可以看我之前关于中断的那篇文章
开始进入正题
我们如何配置串口中断
由于之前我们已经在user 这个文件夹下添加过这个文件了
所以我们直接在配置串口的那一个文件下 进行配置

首先 我们先配置 NVIC_InitTypeDef 这个结构体

uint8_t NVIC_IRQChannel; 中断分组
uint8_t NVIC_IRQChannelPreemptionPriority 抢占优先级
uint8_t NVIC_IRQChannelSubPriority; 子优先级
FunctionalState NVIC_IRQChannelCmd; 使能通道

	NVIC_initstruct.NVIC_IRQChannel  =USART1_IRQn;
	NVIC_initstruct.NVIC_IRQChannelCmd 	=	ENABLE;//!!! 
	NVIC_initstruct.NVIC_IRQChannelPreemptionPriority  = 1;
	NVIC_initstruct.NVIC_IRQChannelSubPriority   =1 ;

还要开启中断组

	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

最后 初始化一下 就完成了

接下来就是对main 函数的编写

uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);

这里我们需要调用这两个函数去进行判断

第一个函数 主要是用于接收数据
第二个函数用来获取标志位
剩下的也判断也很简单 我就不细说了 直接上代码

void USART1_IRQHandler(void )  
{
	char buf;
	if(USART_GetITStatus( USART1, USART_IT_RXNE)!=RESET);
	{
		buf =USART_ReceiveData(USART1);
		if(buf == 'O')
		{
			GPIO_ResetBits(GPIOC,  GPIO_Pin_13);
			USARTSend(USART1, " LED is  ok");
		}else if(buf == 'C')
		{
				GPIO_SetBits( GPIOC,  GPIO_Pin_13);
				USARTSend(USART1, " LED is  down");
		}
	}
}

剩下就是使用我们的串口调试小助手就进行调试
文章里面可能会有一些错误 还望指出

好的,我可以为您提供一些关于在STM32设置串口中断的基本步骤。请注意,以下步骤可能与您的具体硬件和软件环境有所不同,因此请在实施之前仔细阅读相关文档和代码。 1. 配置串口 在STM32中,您可以使用USART或UART模块来设置串口。在使用之前,您需要先初始化这些模块,并设置相关的GPIO引脚。这通常包括设置波特率、数据位数、停止位数、奇偶校验等参数。 2. 开启串口中断 要开启串口中断,您需要在初始化USART或UART模块时设置相应的中断标志位。例如,对于STM32F4系列,您可以使用以下代码来开启USART的中断: NVIC_InitTypeDef NVIC_InitStructure; USART_ITConfig(USART1, USART_IT_RXNE, 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); 在上述代码中,我们将USART1的接收中断标志位USART_IT_RXNE设置为ENABLE,然后使用NVIC_InitTypeDef结构体来配置中断向量表,包括中断通道、抢占优先级、子优先级等参数。最后,通过调用NVIC_Init函数来使能中断。 3. 实现中断处理函数 在开启中断后,您需要实现相应的中断处理函数来处理接收、发送和错误等事件。对于USART的接收中断,您可以使用以下代码来实现中断处理函数: void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收到数据 { char data = USART_ReceiveData(USART1); //读取接收数据 //处理接收到的数据 } } 在上述代码中,我们首先检查接收中断标志位USART_IT_RXNE是否被触发。如果是,则读取接收缓冲区中的数据,并进行相应的处理。您可以根据需要添加其他处理代码,例如错误处理或发送中断处理等。 希望这些步骤能够帮助您在STM32中成功设置串口中断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值