stm32如何判读输入IO口的高低电平
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32如何判读输入IO口的高低电平相关的知识,希望对你有一定的参考价值。
我向STM32的IO输入了一个高电平,想用stm32来检测,但是为什么检测出来的一直是低电平,我用万用表测明明是高电平,这个语句应该是怎么写的
if(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_15)==1)
GPIO_SetBits(GPIOB , GPIO_Pin_7);
else
GPIO_ResetBits(GPIOB , GPIO_Pin_7);
这样写不对吗
2.检查一下这个io口有没有已经重复初始化了
3.检查这个高电平是否超出了检测范围,看一下stm32芯片的spec 参考技术A 我也刚开始学,你GPIO初始化有没有把GPIO_InitStructure.GPIO_Mode设为输入模式呢。。。。其实我也不懂,你要是解决了请@我一下,让我也学学
stm32-独立按键
时间有点仓促,写的比较粗糙 先写点上去吧
前面讲过了io口的设置,按键不过是把io口设置成其他的模式,如果按键接的vcc就将相应io口设置成下拉输入模式,接地就上拉输入模式(没按下的时候就要默认高电平)
然后就和51的时候一样处理抖动,读取状态就行了,我也改成没使用商家给的函数,只使用库函数了
以下为key驱动
#include "key.h"
void delay_ms(u16 time)
{
u16 i=0;
while(time--)
{
i=8000; //////////....????
while(i--) ;
}
}
void KEY_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//é?à-ê?è?
GPIO_Init(GPIOA,&GPIO_InitStructure);
// GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
// GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//é?à-ê?è?
// GPIO_Init(GPIOC,&GPIO_InitStructure);
//
// GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
// GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//??à-ê?è?
// GPIO_Init(GPIOA,&GPIO_InitStructure);
}
u8 KEY_Scan(u8 mode)
{
u8 temp;
temp=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15);
if(temp==0)
{
delay_ms(10);
temp=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15);
if(temp==0)
{
return 0;
}
}
return 1;
}
以下为main,led和上次一样
#include "led.h"
#include "key.h"
void delayms(u16 time)
{
u16 i=0;
while(time--)
{
i=8000;
while(i--) ;
}
}
int main()
{
KEY_Init();
LED_Init();
while(1)
{
if(KEY_Scan(0))
{
GPIO_SetBits(GPIOA,GPIO_Pin_8);
delayms(500);
}
else
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
delayms(500);
}
}
//return 0;
}
以上是关于stm32如何判读输入IO口的高低电平的主要内容,如果未能解决你的问题,请参考以下文章