STM32串口悬空导致CPU持续进入中断函数

STM32的串口开启中断,在串口悬空(即不接外设)的情况下,CPU会不断的进串口中断服务函数

并且接收到的数据为0,当你把外设接上,一切OK。

void USART2_IRQHandler(void)
{
	INT8U tmp;
	/* OK */
	if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET){
		USART_ClearITPendingBit(USART2, USART_IT_RXNE);
		tmp = USART_ReceiveData(USART2);
	}
}

其实原因很简单,在初始化串口是输入引脚设置成了悬空输入-GPIO_Mode_IN_FLOATING。

设置成上/下拉输入,就可以解决。

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
时间: 2024-10-13 23:22:08

STM32串口悬空导致CPU持续进入中断函数的相关文章

一条语句导致CPU持续100%

一大早收到一堆CPU预警邮件,通常每天只在统计作业执行期间会收到2~3封CPU预警邮件.这次的预警来自另一台服务器,并且明细数据显示其CPU一直维持在49%.登录到服务器,查看任务管理器(查看资源监视器更好),CPU时不时上涨到100%,CPU被谁使用了呢?虽然猜测到是被SQLServer,还是打开性能监视器添加\Processor(_Total)\% Processor Time.Process(sqlservr)\% Processor Time计数器可以看到CPU使用率持续98%时,SQL

STM32串口中断的一些资料

在研究STM32串口接收发送中断的时候找到不少不错的资料,现在备份在这里.以供自己查阅,以及方便其他人. TC ====TXE 顺便预告下最近会写个有关串口处理数据的帖子,从查询和中断方面以及数据处理的方式,从队列以及FIFO方面写起. SECTION 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 /* 调试STM32串口过程中发现一个奇怪的问题,

STM32串口中断卡死主循环问题分析

在一项目中,使用STM32作为主控,程序运行一段时间后概率出现主循环卡死现象. 问题分析如下: 1.程序USART2不停接收并处理串口数据,波特率115200: 2.主循环卡死: 3.USART1中断及TIM2中断响应函数运行正常:(USART1及TIM2中断优先级均比USART2高) 4.出现现象后,拔掉USART2的接收数据线,现象不能回复正常: 5.出现现象后,拔掉后再插入USART2的接收数据线,现象不能回复正常: 6.并未出现HardFault现象: 基于以上4点,可能原因如下: 1.

STM32串口中断实例二

int main(void) { uint8_t a=0;//LED高低电压控制 /* System Clocks Configuration */ RCC_Configuration(); //系统时钟设置 /*嵌套向量中断控制器 说明了USART1抢占优先级级别0(最多1位) ,和子优先级级别0(最多7位) */ NVIC_Configuration(); //中断源配置 /*对控制LED指示灯的IO口进行了初始化,将端口配置为推挽上拉输出,口线速度为50Mhz.PA9,PA10端口复用为串

STM32串口之空闲中断

NBiot模块一般都是串口接口,使用AT指令集,对接中国移动onenet平台.先用串口助手去测试,流程测试OK之后需要在MCU上重新写一遍. STM32串口 IDLE中断 IDLE其实是空闲的意思.IDLE中断叫空闲中断,不叫帧中断.那么什么叫空闲,怎么定义空闲呢?在实际发送数据的时候,比如一串字符串,我们会采用如下方式发送 void uart1_putc(char dat) { SBUF = dat; while (!TI); TI = 0; } void uart1_puts_n(char

STM32串口USART1的使用方法和程序

通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半双工单线通信. 1.STM32固件库使用外围设备的主要思路 在STM32中,外围设备的配置思路比较固定.首先是使能相关的时钟,一方面是设备本身的时钟,另一方面如果设备通过IO口输出还需要使能IO口的时钟:最后如果对应的IO口是复用功能的IO口,则还必须使能AFIO的时钟. 其次是配置GPIO,GPI

串口通信常用波特率,中断函数

1.12M晶振产生2400 4800波特率 /**************************************************************** 函数名:UART串口初始化函数 调  用:UART_init(); 参  数:无 返回值:无 结  果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用) 备  注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ] /********************************

STM32串口USART1的使用方法

前言: 通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的   波特率选择,支持同步单向通信和半双工单线通信. 1.STM32固件库使用外围设备的主要思路 在STM32中,外围设备的配置思路比较固定.首先是使能相关的时钟,一方面是设备本身的时钟,另一方面如果设备通过IO口输出还需要使能IO口的时钟:最后如果对应的IO口是复用功能的IO口,则还必须使能AFIO的时钟. 其次是配置G

STM32串口控制步进电机(原创)

用的42步进电机: 厂家可能不一样,两项四线步进电机,里面有两个线圈.在电机什么电都没有接的情况下,用万用表测量四个管脚:两两短接(或者阻值很小)的为一组,可以分别接A+,a-剩余接B+,B-;顺序可以互换:  经测,我用的17hs4417  黑绿一组,红蓝一组. 建议还是买个步进电机驱动器,五六十一个,相当好用. 贴一下STM32串口控制步进电机的代码: #include "led.h" #include "delay.h" #include "key.