历史上的今天
返回首页

历史上的今天

今天是:2025年07月21日(星期一)

正在发生

2018年07月21日 | STM32有关GPIO引脚的一些问题

2018-07-21 来源:eefocus

/* 
名称:STM32有关GPIO引脚的一些问题 
说明:今天在编写一个键盘扫描程序的时候,出现了一些问题。 
有的引脚能读出电平状态、有点引脚确一直读不出状态。改了一下午,查了好久,终于有点眉目了。现简述如下: 
我在用引脚的时候,使用的是PB0、PB1、PB2、PB3、PB4…,将其引脚配置的方式是上拉输入。PB2、PB3、PB4一直有问题。PB0、PB1是可以读出状态的(但是只能单独使用)。

对于PB2来说,其不仅是PB2,它也是BOOT1引脚。当系统复位之后,开始的几个系统时钟使用的是BOOT1,用来判断系统从何处读取置零。之后,PB2就可以作为普通的IO引脚使用了。由于开发板设置的是从内部FLASH启动,BOOT1一直是置零的。然后,系统启动之后,也没拔短接冒(作用是BOOT1置零),所以PB2一直是低电平。可能这就是PB2引脚不能使用的原因了。 
但是这样还有点不理解,就是PB2既然一直处于低电平,那在我的程序就相当于一直处于按键状态了,但是为什么没出现按下按键该有的反应呢?这点我还没搞清楚,以后有机会再慢慢理解吧。

关于PB3、PB4来说,其复位之后的功能并不是普通的IO引脚,而是用于调试使用的引脚。如果想要其当做普通的IO引脚必须进行重映射。当然,有一个不知道是不是巧合的现象是,单独使用PB4引脚时,也是可以读出电平状态的,也就是说运行的结果是符合预期的。但是,PB4并没有作为普通的IO引脚啊,关于这点,我也还没弄清楚。

相关引脚图如下: 
表头

PB2 
*/

PB3、PB4


//按键输入端口配置

void GPIO_KEY_Config()

{

    GPIO_InitTypeDef GPIO_InitStructure;


    RCC_APB2PeriphClockCmd(KEY_GPIO_CLK,ENABLE);


    GPIO_InitStructure.GPIO_Pin = KEY_GPIO_PIN;


    GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_IPU;      //配置成上拉输入


    GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStructure);


}




//键盘扫描

int8_t KeyScan()

{

    int8_t i = 0;

    uint16_t test_pin = 0x0010;

    for(;i<4;++i)

    {

        if(GPIO_ReadInputDataBit(KEY_GPIO_PORT,test_pin) == KEY_ON ) 

        {

            delay_ms(10);


            if(GPIO_ReadInputDataBit(KEY_GPIO_PORT,test_pin) == KEY_ON)

            {

                while(GPIO_ReadInputDataBit(KEY_GPIO_PORT,test_pin) == KEY_ON)

                ;


                return i+1 ;

            }


        }


        test_pin = test_pin<<1;


    }


        return -1;


}



头文件:



#define KEY_GPIO_PORT   GPIOB

#define KEY_GPIO_PIN        GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7


#define KEY_GPIO_CLK    RCC_APB2Periph_GPIOB


#define KEY_ON 0

#define KEY_OFF 1



//按键输入端口配置

void GPIO_KEY_Config(void);


//键盘扫描

int8_t KeyScan(void);


推荐阅读

史海拾趣

Cedrat Technologies公司的发展小趣事

在电子行业中,振动控制是一个至关重要的领域。Cedrat Technologies凭借其在压电技术领域的深厚积累,成功开发了一套主动振动控制系统。该系统通过精确监测机械结构或设备的振动情况,利用压电执行器产生相位相反的振动信号,有效抵消原始振动。这一技术的问世,不仅大幅提升了设备的稳定性和精度,也为机械结构的振动控制开辟了新的途径。Cedrat Technologies因此在电子行业中树立了新的技术标杆。

aconno公司的发展小趣事

在追求经济效益的同时,aconno公司也积极履行社会责任,致力于实现可持续发展。公司注重环保和节能,采用环保材料和工艺,减少生产过程中的污染排放。此外,aconno还积极参与社会公益事业,为弱势群体提供帮助和支持。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

以上便是关于aconno公司在电子行业中发展起来的5个相关故事。这些故事展示了aconno在创新、品质、市场、人才和社会责任等方面的努力和成就,为公司的长远发展奠定了坚实的基础。

Digital公司的发展小趣事

DIALIGHT公司的故事始于1938年的纽约布鲁克林,当时该公司专注于为飞机生产仪表板灯。随着技术的不断进步和市场的变化,公司在1971年,即LED推出仅一年后,推出了他们的第一个LED产品。这一举措标志着DIALIGHT正式从传统的飞机仪表板灯制造转向LED照明技术的研发和应用。从此,DIALIGHT彻底改变了LED的用途,将其广泛应用于世界各地的交通控制、指示灯、结构塔和工业场所,为全球提供了优质的照明解决方案。

Electronic-Bauteile Goerlitz GmbH公司的发展小趣事

随着公司规模的扩大,Electronic-Bauteile Goerlitz GmbH公司意识到供应链管理的重要性。公司通过优化供应链管理,实现了原材料采购、生产、物流等各个环节的协同作业。这不仅提高了生产效率,降低了成本,还确保了产品质量的稳定性和交货期的准确性。这些努力使得公司在竞争激烈的市场中保持了良好的竞争力。

General Instrument公司的发展小趣事
如果保护器的工作参数没有正确设置,可能导致其在正常电压范围内误判为过欠压状态。
Green Solution Technology Co Ltd公司的发展小趣事
导致电路中出现瞬间过高或过低的电压。

问答坊 | AI 解惑

液晶监视器的常见故障

监视器作为矩阵控制系统的监视器终端时,为什么在矩阵控制器切换图像是会出现一段时间的不同步现象?     在监控系统中,每路前端设备(如摄像机)等输出的图像信号中的场同步信号如果存在相位差,则矩阵控制器切换各路图像信号时,监视 ...…

查看全部问答>

学ARM的步骤是什么

学ARM的步骤是什么,有一定51基础,堆嵌入式有点意思,大家有什么好的建议或者好的论坛,最好是有个纲要了。…

查看全部问答>

急:请问TLP627次级是否可以接24V直流呢,输入端TTL电平是否可以驱动

如题,因为需要控制24V直流考虑TLP627,负载大概1-5K,不知道是否可以实现 输入端想用TTL控制,电阻1.1K,不知道有没有大了 多谢啦…

查看全部问答>

关于51单片机读写AT24C32的问题

哪位好心的大侠给个51单片机读写AT24C32的具体例子吧!!! 最好是汇编的,C语言的也行,小弟谢过了先! 小弟邮箱 Rufenguu@yahoo.com.cn…

查看全部问答>

前台显示 字符串 为 乱码

EVC 下   这样使用Format 有问题吗 ? void CTestDlg::OnResult() {         UpdateData(true);         m_RESULT.Format(_T(\"%s\"),\"123\");         UpdateData ...…

查看全部问答>

怎样用汇编输出很大的数

怎样输出 x dd 5937000 这种大数呢,最后要输出5937000 小弟初学汇编,希望大虾指点一下,不胜感激…

查看全部问答>

求救:vxWorks启动盘的制作

各位大侠帮帮忙啊!     我把启动盘插入后,显示器上显示:v1.6+++++++++++++++。几行加号以后就停在那里不动了。     我的目标机处理器是p3的,网卡类型是Intel 8255x ethernet interface.     我猜可能是启动参 ...…

查看全部问答>

猜猜看这个是干啥的?

得仔细看罗,很细微,马虎一看就是我们用的2.54mm间距的接插件…

查看全部问答>

放大电路频率响应的一般分析方法

为了简化计算,放大电路的频率响应分析一般采用分频区分析的方法,即按低频区、中频区和高频区分别进行。在每个频区分析时,先根据其工作特点抓住影响该频区的主要参数对电路进行简化,并在此基础上求得本区的频率响应。最后,将三个频区的结果综合 ...…

查看全部问答>

只为uC而生,uS成长历程 19(略带意外的M25P80)

很抱歉,这一周,我直到今天才发这个帖子。 而上一周的内容也很稀少。 实在是因为弄M25P80这个芯片的时候遇到点麻烦。 如今想起来,我想结论应该是 我猜对了第一脚,可是第一个使用的芯片却可能被我弄坏了——也或者,我的人品真的太差了,又是 ...…

查看全部问答>