请选择 进入手机版 | 继续访问电脑版

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

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

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

; [* Q; p: F$ k% o7 e
    硬件环境采用STM8SF103,电压为3.3V。电路需要注意的是STM8SF103这系列的IO作为输入口时只能是上拉输入和悬浮输入,虽然是弱上拉,在VCC为3.3V电压时,仍然能够被拉升至3.0V左右。
    所以按键检测电路IO口一端需要接地,而不是外接上拉。悬浮方式下IO仍然会有0.89V左右电压,读取对应的IO寄存器IDR,仍然处于逻辑高电平状态。
1.1.jpg
    软件代码相对很简单,只需要将IO口设置成上拉输入即可。采用轮询代码如下:
  1. //初始化只需要设置IO口模式即可。
    / I# E. X' S$ E
  2. GPIO_Init(KEY2_PORT,KEY2_PIN,GPIO_MODE_IN_PU_NO_IT);//上拉输入,不产生中断! I6 i* `7 `! T% b# P' S
  3. //按键检测部分
    3 w; B0 g7 Q: ]8 B+ U
  4. /** G+ u: o; Q* T) E3 U7 o
  5. #defineKEY10% Z6 s% j6 x/ t9 Q
  6. #defineKEY1_PORT(GPIOD)
    : ~/ i1 d* n6 B, I$ Y# n7 U2 y0 h% h
  7. #defineKEY1_PIN(GPIO_PIN_4)
    . a4 S. E0 P# M& {0 l5 X. G) e
  8. #defineKEY21
    % M5 f" W# u  g+ u0 l
  9. #defineKEY2_PORT(GPIOC); l" V- m$ \) k& i& j
  10. #defineKEY2_PIN(GPIO_PIN_1)
    ' R! a3 t8 ^9 V+ d' e
  11. */
    3 c" U  |3 G9 T6 q4 k- C/ A+ ^
  12. u8CheckKey(u8key)
    5 a- B: x  e; O6 `% [& P+ c
  13. {
    7 S) @4 l& }+ D9 _. d( }
  14. if(key==KEY1)
    , R$ D! J# L! @- h
  15. {  g, |9 X: h# L) B9 x
  16. if(KEY1_PORT->IDR&KEY1_PIN)//检测到有按键了,IO口电压会被拉低
    0 x9 L  @# e4 I4 E/ H2 r7 F: d8 y1 g- `
  17. {. ?+ W2 t& y7 ~8 }* \7 O. d( o
  18. delay_5ms();- G% O  g; H; s' c
  19. if(KEY1_PORT->IDR&KEY1_PIN)//仍然存在低电平6 z& p: L2 d8 B2 b, `8 V
  20. {- V* L1 o- o% N) s& d2 n# b
  21. while(!(KEY1_PORT->IDR&KEY1_PIN));//等待放开
    5 C9 I) z. o, z$ S7 ^
  22. returnKEY1;
    3 ^5 C3 b9 V( B
  23. }( E* j( |. q! F5 ~& o8 l2 P
  24. }, f3 ^3 O  E! S5 @/ J( X0 W( f
  25. return0;6 d3 G  X6 M" L7 f
  26. }elseif(key==KEY2)
    - R7 `* G0 s: E7 M
  27. {+ O7 o8 y5 f$ u# r9 s* a: ]
  28. if(!(KEY2_PORT->IDR&KEY2_PIN))//检测到有按键了
    9 \" P1 r6 P% M/ ?* I1 A
  29. {5 o! Z" Y4 q7 s6 ]) m% k
  30. delay_5ms();
    ( Q* O$ b' K: ]
  31. if(!(KEY2_PORT->IDR&KEY2_PIN))//仍然存在低电平
    6 d. i" u) M5 d4 s3 S& O; _8 |9 m% H
  32. {9 P' j" I: B7 z8 h
  33. while(KEY2_PORT->IDR&KEY2_PIN);//等待放开( X$ Z( E/ P* T7 l5 o
  34. returnKEY2;- r+ G% `- `1 @6 h
  35. }
    : K0 a& g4 m7 h% b3 W( B: a
  36. }. F" m2 `' a: g! W* k2 t8 I/ \2 h5 T
  37. return0;' _% x+ ]" |! Y
  38. }# o) `; u% a% \$ h# f5 V* c  q; Q
  39. return0;
    * L, Y0 D, P2 R3 g  B; C
  40. }
复制代码

1 l% G+ s! `: j
    总结一下,硬件电路将按键IO口的一端接地。软件配置不能使用悬浮输入方式,这种方式电压可能会不稳定。
文章出处: STM32嵌入式开发
7 p3 E; }8 H& j' e  D
收藏 评论0 发布时间:2021-4-16 14:01

举报

0个回答

所属标签

相似技术帖

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