江科协B站STM32入门教程-2023版 3-4按键控制LED灯踩坑记录

按照教程仔细操作,但是只有按键1好使,按键11始终无法控制按键。经过比对,跟江科协给的参考代码完全一致。

为排错,尝试了烧录参考代码,但还是一样。

把所有代码丢给chatgpt,回复:

你的代码中有几个可能的问题点,我们可以逐一检查:

1. **上拉电阻配置**:
   你的代码中将GPIO配置为上拉输入模式(`GPIO_Mode_IPU`),这意味着GPIO的内部上拉电阻被启用。确保你的按键电路设计中确实需要上拉电阻,并且外部没有其他电路会干扰这个上拉设置。

2. **按键抖动处理**:
   你的代码中已经包含了消抖逻辑,这是正确的。但是,如果按键抖动很严重,可能需要更复杂的消抖逻辑,比如使用定时器或者更长时间的延时。

3. **GPIO读取逻辑**:
   你的代码中使用了`GPIO_ReadInputDataBit`函数来读取GPIO的状态。确保这个函数调用是正确的,并且没有被其他代码错误地修改了GPIO的状态。

4. **按键电路连接**:
   确保按键的电路连接正确,没有短路或者断路的情况。检查按键的一端是否正确连接到GPIO_Pin_1,另一端是否接地。

5. **中断和阻塞**:
   你的代码中使用了`while((GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0));`这样的阻塞等待语句。这可能会导致程序在按键按下时无法响应其他中断或者任务。考虑使用中断服务程序来处理按键事件。

6. **编译器和链接器设置**:
   确保你的编译器和链接器设置正确,没有遗漏任何必要的启动文件或者库文件。

7. **硬件问题**:
   如果以上软件方面的检查都没有问题,那么可能是硬件本身的问题,比如GPIO_Pin_1的引脚物理损坏,或者按键本身故障。

8. **代码逻辑**:
   你的代码中,`Key_GetNum`函数在检测到按键1按下后,会将`KeyNum`设置为1,但是如果按键1和按键11同时按下,`KeyNum`也会被设置为2。这可能不是你想要的行为。你可能需要修改逻辑,确保同时按下多个按键时能够正确处理。

9. **调试**:
   使用调试工具(如ST-Link)来逐步执行代码,检查`GPIO_ReadInputDataBit`的返回值,确保它在按键按下时返回0。

10. **固件版本**:
    确保你使用的STM32固件库版本与你的芯片兼容,并且是最新的,以避免已知的bug。

检查这些可能的问题点后,如果按键仍然没有反应,可能需要更详细的调试或者考虑硬件问题。

一开始,看到5,觉得怎么可能。但是后面经过交换灯泡、交换导线、更改控制引脚等所有可能后怀疑是不是芯片坏了。

通过不断尝试,发现先按键按下的可以控制,后按的不行。再想起这可能点5,发现还真是。

原因是我没有买按键,用的公对公导线代替,当我测试完一个引脚(相当于按键)后,我便插回到面包板,接地(相当于一直按下按钮不松手),而代码里是按下时死循环,直到松手。因此导致后按者不好使。

……

解决办法是,测试完一个引脚后拔出该导线悬空,再测试别的引脚 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值