hbwyd 发表于 2024-5-3 16:19:18

求助:无法循环读取stm32 引脚输入电平值

需要在主程序循环读取引脚输入电平,执行LED点亮和熄灭,现在问题:引脚电平变化led无动作,已确认led点亮和熄灭程序没问题,请教大侠指点,谢谢。       


while (1)
        {

        if(GPIO_ReadInputDataBit(GPIOE,2)==0 )
        {
                LED1_ON;
        }
        if(GPIO_ReadInputDataBit(GPIOE,2)==1 )
        {
                LED1_OFF;
        }
        }

zchong 发表于 2024-5-3 16:59:01

那就是获取管脚状态有问题呗

lb0857 发表于 2024-5-3 17:20:09

io口变换频率是多少?代码就仅仅这一段还是有其他中断函数?

hbwyd 发表于 2024-5-3 17:32:56

是的,不执行if里面程序

hbwyd 发表于 2024-5-3 17:33:52

lb0857 发表于 2024-5-3 17:20
io口变换频率是多少?代码就仅仅这一段还是有其他中断函数?
(引用自3楼)

变换频率在几秒钟,没有开中断

Himem 发表于 2024-5-3 18:00:49

确定有PEx系列引脚吗,100pin开始的stm32上才有

PE引脚时钟初始化了吗

lb0857 发表于 2024-5-3 18:25:20

楼上说的估计就是问题所在
越是稀奇古怪问题,越是疏忽了基本因素而造成。

hbwyd 发表于 2024-5-3 18:52:49

Himem 发表于 2024-5-3 18:00
确定有PEx系列引脚吗,100pin开始的stm32上才有

PE引脚时钟初始化了吗
(引用自6楼)

用的144引脚芯片,端口时钟打开了,引脚速率需要设置吗?

kitten 发表于 2024-5-3 19:17:43

目测楼主是初学,狠狠心直接上hal库吧。各种优点。缺点微不足道

hbwyd 发表于 2024-5-3 19:17:49

现在的情况是:if((GPIO_ReadInputDataBit(GPIOA,0))==0 )能检测到并执行,但是if((GPIO_ReadInputDataBit(GPIOA,0))==1)检测不到
               

Himem 发表于 2024-5-3 19:51:06

本帖最后由 Himem 于 2024-5-3 19:52 编辑

GPIO_Pin_2 != 2
GPIO_Pin_0 != 0

liwei_jlu 发表于 2024-5-3 20:02:09

判断==0
判断!=0

Stm32Motor 发表于 2024-5-3 20:36:27

else不就好了

tang_qianfeng 发表于 2024-5-3 21:06:34

大概率没开端口时钟吧,或者端口模式配置不对

ycheng2004 发表于 2024-5-3 21:16:33

这个检查速度很快,是否把IO口的频率设置到最高?

leafstamen 发表于 2024-5-3 23:48:47

一般设置为输出的引脚读锁存电平和设置为输入的引脚电平检测不是同一个寄存器,不知道stm32的寄存器是不是分开的。

jianfengxixi 发表于 2024-5-4 07:26:24

参数2应该不是对应pin2,可能是对应pin1???

1a2b3c 发表于 2024-5-4 09:38:40

你们这些软件高手都不知道砸搞调试的,换做我这个半罐水的半罐水,直接就把整个一组端口以及各个觉得没设置对得寄存器读出来打印出来看看不就清楚了。
再不挤,调试器(仿真/烧写器)是来干嘛的啊???挂着一步步看各种寄存器各个端口值的变化啊,量一下io值和寄存器里面的是不是一致

my_avr 发表于 2024-5-4 09:54:09

你确定你写的
GPIO_ReadInputDataBit(GPIOE,2)
是GPIOE Pin2吗?

sweet_136 发表于 2024-5-4 13:10:03

楼上不错... 用了这个玩意,就不要写一个2了..... 要写GPIO_PIN_2

pspice 发表于 2024-5-4 18:33:54

if((GPIO_ReadInputDataBit(GPIOA,0))==1)
他是非零值,但是不是1

kinoko 发表于 2024-5-4 21:34:44

你这个需求直接硬件电路解决
页: [1]
查看完整版本: 求助:无法循环读取stm32 引脚输入电平值