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

STM8单片机按键检测电路设计

[复制链接]
y369369 发布时间:2021-4-16 14:01

9 k  A  {$ V' K! R' a2 H& a
    硬件环境采用STM8SF103,电压为3.3V。电路需要注意的是STM8SF103这系列的IO作为输入口时只能是上拉输入和悬浮输入,虽然是弱上拉,在VCC为3.3V电压时,仍然能够被拉升至3.0V左右。
    所以按键检测电路IO口一端需要接地,而不是外接上拉。悬浮方式下IO仍然会有0.89V左右电压,读取对应的IO寄存器IDR,仍然处于逻辑高电平状态。
1.1.jpg
    软件代码相对很简单,只需要将IO口设置成上拉输入即可。采用轮询代码如下:
  1. //初始化只需要设置IO口模式即可。
    " }' Y% j6 _- Y- z3 ~) U
  2. GPIO_Init(KEY2_PORT,KEY2_PIN,GPIO_MODE_IN_PU_NO_IT);//上拉输入,不产生中断! K) S! T- t. K4 h8 h' }
  3. //按键检测部分
    7 l) l3 p) {, B0 t. ?- s! O  [
  4. /*
    ; c; ?+ r; l! h. [; J6 O4 @5 e. U
  5. #defineKEY10
    1 z! p) W3 S6 P5 f. U9 D9 m4 D
  6. #defineKEY1_PORT(GPIOD)  T2 ?; _! [: j" J! J1 r
  7. #defineKEY1_PIN(GPIO_PIN_4)1 q0 W) a7 d4 U! P  n" g- ]) |2 k
  8. #defineKEY21
    3 M/ V& P( B' g# v% H5 {
  9. #defineKEY2_PORT(GPIOC)& V4 g: \9 e7 X( R% ?3 v4 v
  10. #defineKEY2_PIN(GPIO_PIN_1)7 Z. i/ z4 Y1 `" l3 o: ~- X
  11. */& v5 o3 I8 O, _8 _
  12. u8CheckKey(u8key)/ [% g- s) t/ V8 }) j+ l$ K! `
  13. {- K' k2 J; S. _% p! X
  14. if(key==KEY1)
    3 q6 r/ C& T7 z# T; s9 g& `- K; p& e0 f
  15. {
    1 b. i1 v7 t4 o8 W- a
  16. if(KEY1_PORT->IDR&KEY1_PIN)//检测到有按键了,IO口电压会被拉低
    3 C0 b& }+ ~' e
  17. {! f2 |# A4 R4 ?9 O
  18. delay_5ms();. U; Y* ]( T; H9 F$ Q( C
  19. if(KEY1_PORT->IDR&KEY1_PIN)//仍然存在低电平' K4 G& ~3 F  ~* {! [
  20. {$ Z1 n% d2 j" y. n
  21. while(!(KEY1_PORT->IDR&KEY1_PIN));//等待放开# G% L: e2 F) b4 Z# T# n
  22. returnKEY1;
    5 S- h" @8 U4 [% G
  23. }
    : ?, a( s8 I( k) P8 X' e
  24. }
    5 m3 I& a: t( C9 X" N( U* M
  25. return0;5 b2 J* h; T7 y
  26. }elseif(key==KEY2)8 W9 F+ Q" r" d( P* y( i
  27. {. I  R! X* m0 \0 i: I# k
  28. if(!(KEY2_PORT->IDR&KEY2_PIN))//检测到有按键了
    ( L5 s) S' ?* M5 ?- H; X
  29. {
    . ~& Y# y9 ^6 m! |# ~# U
  30. delay_5ms();
    , j2 y9 p3 i# B' a, E
  31. if(!(KEY2_PORT->IDR&KEY2_PIN))//仍然存在低电平' c4 y$ w/ Z, }# s! i/ u
  32. {
    . H/ [5 g  M' [; q4 q
  33. while(KEY2_PORT->IDR&KEY2_PIN);//等待放开
    ) q( Q0 A9 Y6 }
  34. returnKEY2;
    9 f8 k8 m; }; c, L8 t: e
  35. }
    ( U% C9 P: o* M+ y; P/ B
  36. }
    $ a5 k# _0 Q" c. l
  37. return0;$ o; h9 R0 t4 q3 k/ q
  38. }5 Z: T+ q: O7 b  ]. ]# l
  39. return0;
    / j: h% E9 W& \' c) S8 {& P- ?2 l+ T
  40. }
复制代码

& T% X, l9 a+ {/ k6 u
    总结一下,硬件电路将按键IO口的一端接地。软件配置不能使用悬浮输入方式,这种方式电压可能会不稳定。
文章出处: STM32嵌入式开发

* ]# q7 J( O' @8 C' |7 M  j
赞 收藏 评论0 发布时间:2021-4-16 14:01

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版