你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于stm8 端口无法读取高电平

[复制链接]
yuanhang518 提问时间:2018-8-4 17:17 /
我将stm8AF5288的端口初始化为:    GPIO_Init(GPIOE,GPIO_PIN_2,GPIO_MODE_IN_FL_NO_IT );  //浮空输入无中断模式

然后:
  if( GPIO_ReadInputPin(GPIOE, GPIO_PIN_2)==1) 就点亮了的灯;

我把端口PE2接到3.3v,发现灯不亮
如果把 if( GPIO_ReadInputPin(GPIOE, GPIO_PIN_2)==0)就点亮了的灯;
把端口姐在GND上灯就亮了

我试了好多次和改变端口模式都是这样  是不是Stm8无法读取高电平吗

请各位大神帮忙看一下  




收藏 评论13 发布时间:2018-8-4 17:17

举报

13个回答
yuanhang518 回答时间:2018-8-4 17:42:00
各位大神给点意见呗 第一次发帖求助 拜托了 纠结好几天了
sincomaster 回答时间:2018-8-4 17:52:15
本帖最后由 sincomaster 于 2018-8-4 17:54 编辑

写得有点乱没看太明白,帮顶你没写你的LED是拉电流还是灌电流驱动
驱动LED为什么要读取高电平呢?不是直接输出高电平或低电平就可以了吗

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

yuanhang518 回答时间:2018-8-4 18:05:26
sincomaster 发表于 2018-8-4 17:52
写得有点乱没看太明白,帮顶你没写你的LED是拉电流还是灌电流驱动
驱动LED为什么要读取高电平呢?不是直接输 ...

LED只是我用来测试底层驱动的,

我们的触发信号是高电平。  LED只是用来,测试端口读取高电平的配置是否通,LED驱动没问题的
七哥 回答时间:2018-8-4 19:03:22
什么跟什么呀,好好把你的逻辑缕缕。
LED是用哪个IO点的?你这只有一个输入的IO。
输入IO浮空,外部给输入IO接1的话,就会检测到1;接-0的话就会检测到0。
如果你输入IO要接按键,那么IO需要接上接电阻,按键接IO与GND。按下按键的时候与GND导通,检测到0;释放按键的时候,由上拉电阻决定了状态1。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

feixiang20 回答时间:2018-8-4 22:31:14
看看你确认的接口对应的代码是否正确
wenyangzeng 回答时间:2018-8-5 07:29:16
楼主把PE2设置成浮动输入,就必须外部增加上拉电阻才能正确读取状态。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

仙景 回答时间:2018-8-6 09:11:14
stm8这个读取写法有BUG,不确定是不是这个问题,直接用PA->IDR寄存器读取那一位就可以了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

freeelectron 回答时间:2018-8-6 09:21:35
1、一般LED驱动的话,都是低电平点亮,高电平灭灯,单片机的IO驱动能力可能不够;
2、接LED的话,应该是输出模式才对呀;
3、输入根据你的应用最好配置成下拉输入或者下拉输入。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

xiajintaord 回答时间:2018-8-6 09:28:57
楼主提问需要描述清楚才行,因为大家并不知道你想干什么;
你可以贴出来 IO 那一部分的原理图,说明你要实现的功能,你的实现方法是什么,出现了什么问题。
这样大家才能帮到你。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

csg123 回答时间:2018-8-6 10:39:31
原理图 没有问题 描述有问题

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

huangyanga 回答时间:2018-8-6 13:43:23
Stm8肯定是可以读取高电平的,按字面意思理解你控制LED用的是其他IO口。那问题应该就是3.3V送进来没有读到。除了楼上几位说的问题,我觉得还有可能是PE2口已经被其他电路拉低,或主控没焊好,这些硬件问题也有必要检查一下。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

仙景 回答时间:2018-8-7 11:01:00
再一次回答一下,我都是测试过的。
如果你使用类似
if(GPIO_ReadInputPin(GPIO_ReadInputPin(GPIOC,GPIO_PIN_7) == SET)
{
.....
}
这样的判断代码,你会发现永远的不到你想要的。
原因是BitStatus是个enum类型,其实而enum从某个层面上说它是与int类型相似。
所以你用
BitStatus test = GPIO_ReadInputPin(GPIO_ReadInputPin(GPIOC,GPIO_PIN_7) ;
你会发现,test值是个8位的数,而非类似BOOL的0或1.

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

csg123 回答时间:2018-8-13 10:00:31
设置有问题
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版