最近做毕业设计,需要用按键来触发外部中断。实验的时候是正常的,但是换了个核心板以及用上自己做的PCB电路板后,出现了一些问题。问题如下:
要求:将连接按键的IO口配置为上拉输入,按键一端接IO口,一端接地,即当按键按下后,该IO口会产生一个下降沿,触发下降沿中断。
问题:将相应的IO口配置好后,测了引脚的的电压,并不是3.3V左右,而是0.1V左右。于是猜想:
1. 外围电路对IO口产生了影响。
2. STM32内部上拉能力较弱,一次只能上拉一个IO口。
于是开始从这两个想法着手解决。首先第一个,很容易就排除了。将外围电路撤掉,我用的是杜邦线,直接拔掉测量引脚上的电压,依然是0.1V左右,于是第1个猜想排除。
第二个,查看万能的参考手册,发现每一个IO口都是有独立的驱动电路,这样第2个也排除了。
最后各种纠结,然后发现:在主函数的开头部分初始化的时候,我把初始化的那个函数给注释掉了。低级错误,见笑了。
现在总结一下:
STM32的输入有4种输入模式:
模拟输入 GPIO_AIN
用于AD转换
浮空输入 GPIO_IN_FLOATING
引脚处于浮空模式,电平状态是不确定的。外部信号输入什么,IO口就是什么状态。
上拉输入 GPIO_IPU
防止IO口出现不确定的状态,比如,当IO口悬空时,就会通过内部的上拉电阻将该点钳位在高电平。
下拉输入 GPIO_IPD
功能与上拉电阻类似,防止IO口出现不确定的状态,比如,当IO口悬空时,就会通过内部的下拉电阻将该点钳位在低电平。
STM32中空的I/O管脚是高电平还是低电平取决于具体情况。
1、IO端口复位后处于浮空状态,也就是其电平状态由外围电路决定。
2、STM32上电复位瞬间I/O口的电平状态默认是浮空输入,因此是高阻。做到低功耗。
3、STM32的IO管脚配置口默认为浮空输入,把选择权留给用户,这是一个很大的优势:一方面浮空输入确保不会出现用户不希望的默认电平(此时电平取决于用户的外围电路);另一方面降低了功耗,因为不管是上拉还是下拉都会有电流消耗。从另一个角度来看,不管I/O管脚的默认配置如何,还是需要在输出的管脚外加上拉或下拉,这是为了保证芯片上电期间和复位时输出的管脚始终处于已知的电平。
4、在没有任何操作的情况下,STM32通用推挽输出模式的引脚默认低电平,也就是有电的状态。所以在配置的时候通常会先把引脚的电平设置拉高,让电路不产生电流。有电到没电这一过程也就是引脚电平从低到高的过程。
5、STM32的I/O管脚有两种:TTL和CMOS,所有管脚都兼容TTL和CMOS电平。也就是说从输入识别电压上看,所有管脚不管是TTL管脚还是CMOS管脚都可以识别TTL或CMOS电平。
关键字:单片机 STM32 输入模式 外部中断
引用地址:
单片机STM32的几种输入模式以及外部中断的配置
推荐阅读最新更新时间:2024-03-16 16:18
基于51单片机的六足仿生机器人
一、整体框架: (1)设计功能: ①能完成多方向行走以及其他的自定义的动作。(前进,后撤,左右转,避障); ②可自动避障; ③通过手机蓝牙下令他的下一步动作。 (2)功能框架: (3)使用器材: ①STC89C52单片机、74LS04(反相器); ②蓝牙串口通信模块; ③超声波测距模块; ④9G舵机18个; ⑤PVC线槽若干(模具); ⑥PCB转印板; ⑦螺丝螺母若干。 ⑦keil3软件 二、工作原理: (1)蓝牙串口通讯模块: 蓝牙串口通讯模块接收手机蓝牙软件发送字符串信号,单片机通过串口通讯协议处理蓝牙模块接收到的信息,再根据信息的内容来判断机器人将进行的下一步行动。 (2)超声波测距模块: 超声波模块向某一方向发射
[单片机]
STC12C5A60S2单片机的10位AD转换程序
//****************************************STC12C5A60S2 AD转换***********************************************// #include stc12c5a.h //头文件在STC公司主页上下载 #include stdio.h #include intrins.h //------------------------------------------------------------------------------ void AD_init(); void serial_init(); void delay(unsigned
[单片机]
AT89S51/52单片机的最小系统电路原理图
单片机最小系统统是指能让单片机运行起来的所需的最少器件构成的电路系统。如果您构建的最小系统作为研究、学习使用,应该满足以下要求:1.有电源;2.有单片机主芯片;3.有程序下载电路;4.有时钟源电路;5.有复位电路;6.有I/O口的负载电路。这样的系统才能满足您下载程序和调试程序的要求。 下图是AT89S51/52单片机的最小系统电路原理图。 电源部分:从电脑USB接口DC5V取电,C4和C5构成USB接口电源的简单滤波电路。开关电源的输出电压往往波纹较大,不像线性稳压器输出的电压那么稳定,所以进行必要的滤波。如果需要接一个电源开关应接在C4和C5的前面,在您接通开关的瞬间产生的抖动能被这两个电容吸收。 复位电路
[单片机]
51单片机(AT89C52)定时器
#include #define uchar unsigned char #define uint unsigned int uchar i,temp; void init() { TMOD=0x01; TH0=(65536-46080)/256; TL0=(65536-46080)%256; ET0=1; EA=1; TR0=1; } void main() { i=0; temp=0x01; init(); while(1); } void timer0() interrupt 1 { TH0=(65536-46080)/256; TL0=(65536-46080)%256;
[单片机]
单片机程序-点阵LED
/****************点阵LED******************/ /** *功能:点阵LED流动显示5,4,3,2,1后,会一直显示闪动的矩形 *作者:徐冉 *日期:2013-06-10 *备注:已经通过调试 **/ /*****************AT89C52-RC MCU****************/ /***********************51hei开发板**************/ #include reg52.h typedef unsigned int uint;//数据类型声明优于#define typedef unsigned char uchar; sbit max7219
[单片机]
基于STC89C52单片机的LED显示器设计
随着LED 显示屏在广告领域的广泛应用,控制系统也在逐步发展。由于控制系统是基于嵌入式微处理器而开发的,所以,单片机在其中占有非常重要的位置。LED 显示屏的控制比较复杂,特别是其特殊效果的显示,比如循环移动、覆盖霓虹灯效果,对处理器的运算速度和执行效率提出了很高的要求,因此,很多控制器生产厂家都采用高端嵌入式系统进行设计。这样做,虽然能在一定程度上提高数据的处理速度,但并不能完全满足所有显示效果的要求,而且开发成本和产品成本也会成倍长,甚至由于设计不当还可能会在显示时出现画面抖动、闪烁和重影等情况。归根结底,在LED 显示屏控制器的设计中,硬件是很重要的因素之一,同时,还要考虑显示数据的组织方式,采用软硬件结合的方法设计一款性价
[单片机]
基于MCU CPLD变压器测试系统的设计与实现
1 引言 BX型信号变压器,BG型轨道变压器和ZG型硅整流器作为铁路信号电器设备的前端,其工作的稳定性、准确性直接关系到行车安全,变压器的可靠检测是严抓质量的第一步,对于生产厂家而言,测试流程不允许抽样,且测试结果应留档。本套测试系统用来测试铁路变压器的各种要求参数,包括原边空载电流、次边空载电压、次边带载电压电流,变压器绝缘电阻、原边电压频率,测量结果精度要求3%,测试系统分为上下位机两大部分,下位机运用智能仪表的设计思想,在MCU和CPLD控制基础上对各种要求测试参数分别进行自动测试,上位机上采用VC++6.0编写软件实现串口通讯,归类统计并判断是否合格,存储打印结果,系统满足操作简单可靠,提高效率,减少误差。 2 功能介
[应用]
STM32如何收发float类型数据?
在之前文章里提到了共用体用来传输浮点数的用法,但那篇笔记中没有详细介绍,这篇笔记我们一起来看一看具体实例。 实际应用中,我们可能需要两个设备通过串口传输浮点数据: 本篇笔记为了方便演示,使用串口助手模拟其中一个设备,本篇笔记内容如下: 我们创建一个用于管理float类型数据的共用体: unionfloat_data { floatf_data; uint8_tbyte ; }; 数据的流向如: 本次使用串口助手模拟发送设备,省略了第一步,主要看第②、③步。 创建两个共用体变量,用于发送与接收: unionfloat_datarx_float_data,tx_float_data; 收发相关代码: 左
[单片机]