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

【经验分享】STM32G4 嵌入式---模块配置---ADC_KEY(拓展板)

[复制链接]
STMCU小助手 发布时间:2022-7-7 15:00
1.模块引脚
7 F" Z; }% Y* e使用PA5接上AKEY# z. }# \" v7 Z# F/ e1 T
$ P" U% s* |/ c% {8 |% |- ?
2.Cubemx实现的配置) g* \0 T- z0 T. E( u5 l! x! k2 Q" p
0 j% f7 c: E% J- v+ o8 S
8_LK]R3M)ZST@IH8IN`QO.png
- R9 o& G5 p* P8 E4 {# ?+ J" E, S% P# o/ M
3.生成工程
, s- v7 u+ o, T) N% f1.ADC采集函数
  x' ], Q: L4 T8 Y! I- k% E采集50次
- Y; S$ t2 I) G) U6 A- J- U8 ]) P* r) G" D
  1. #define BTN_BUFF_LEN        50
    0 t: ]* l) R4 b+ S
  2. uint16_t btn_buff[BTN_BUFF_LEN];
复制代码
  1. uint16_t Read_ADC()
    , S( |* [$ S* J( b( D
  2. {
    & r4 {; K2 ^. c% b! E
  3.         uint16_t aa;
    1 i" u+ [& d; T  E3 S- U
  4.         HAL_ADC_Start(&hadc2);: S6 e! d! y- W! ]
  5.         aa = HAL_ADC_GetValue(&hadc2);
    7 X, ^% h0 G* H& X# T
  6.         HAL_ADC_Stop(&hadc2);% g; g# \+ T8 e
  7.         return aa;$ f- ~- g: d0 B# f' U8 `
  8. }
复制代码
4 s9 w( p+ w% E. |
2.ADC采集值处理

  ]9 t! Y( u4 |' Q
  1. uint16_t Read_Btn(void)
    # Y- m& X) b% W
  2. {
    0 E0 o- z1 k5 g- H  y6 _
  3.         uint16_t tmp;+ k; w$ S8 l8 p5 L  h
  4.         uint8_t i = 0,j = 0;$ W' |/ s, f3 {; y9 M6 B! g% Q
  5.         
    1 m7 t! Q, N7 D$ a8 A) h. S5 E
  6.         for(i=0; i<BTN_BUFF_LEN; i++){+ p7 o( k) P4 K. ]
  7.                 btn_buff<i> = Read_ADC();8 J" j/ ~6 K: ~. Y. u
  8.         }9 L8 P1 a6 v% j* F
  9.         for(i=0; i<=BTN_BUFF_LEN/2; i++){
    & q: p; z8 R2 a" l: R% h. q5 }
  10.                 for(j=0; j<        BTN_BUFF_LEN-i-1; j++){
    0 N9 l, k7 ^4 d
  11.                         if(btn_buff[j+1] < btn_buff[j]){1 Z! @5 N9 [3 |- A0 B4 V* Q
  12.                                 tmp = btn_buff[j+1];
    1 a4 x8 }# ]: U' [2 E
  13.                                 btn_buff[j+1] = btn_buff[j];
    8 m+ u9 c0 U: j4 T
  14.                                 btn_buff[j] = tmp;
    0 d  g2 p  X! f; |+ P. e2 B
  15.                         }. {' L$ i6 \# ~* C! ?
  16.                 }5 t( q' [* c" I1 h6 F" n* Y& Y
  17.         }+ J  o7 ~, d' V/ Q

  18. 6 f6 @* E* U! U( O6 C9 ?  a; P
  19.         if(BTN_BUFF_LEN % 2 == 0){1 M, Z* I0 n4 y( Y' o, z
  20.                 return(btn_buff[BTN_BUFF_LEN/2-1] + btn_buff[BTN_BUFF_LEN/2])/2;/ O9 g: I! g( O, _8 u
  21.         }else{
    ( n! v* z5 ~3 L3 M
  22.                 return(btn_buff[BTN_BUFF_LEN/2]);5 [4 r* P3 S2 x# v2 M* L: U
  23.         }
    $ c: `1 J2 M+ P2 d! U* O
  24. }</i>
复制代码

) u- q- w! g. H( p# }- ^3.按键识别3 {. Y% ?: J& k4 H. y( Q
  1. uint8_t Scan_Btn(void)$ r: l1 a) D8 J$ A6 R8 r8 E
  2. {& Z* w5 k# ^8 _' w  X' A
  3.         uint16_t btn_tmp = 0;
    2 i) l& a; f6 N: U( E
  4. ( L7 y! H, R% a) j' t' m# F
  5.         btn_tmp = Read_Btn();
    ! ^* U( K/ O6 [5 N1 G7 U
  6.         if(btn_tmp < 0x0FFF/14){' {8 Z3 j0 z5 W. O" F8 J2 Q: v
  7.                 return 1;0 `" ~; M7 P+ ^! \
  8.         }else if((btn_tmp > 0x0FFF/14) && (btn_tmp < 0x0FFF/14*3)){" W: v" f' j: r7 F' u
  9.                 return 2;
    7 p, Q  k5 [7 Z) O: G* {
  10.         }else if((btn_tmp > 0x0FFF/14*3) && (btn_tmp < 0x0FFF/14*5)){
    ; w! L  k  c" k8 L8 T( s
  11.                 return 3;
    - q3 ^5 W" }& b- o  L; e( T
  12.         }else if((btn_tmp > 0x0FFF/14*5) && (btn_tmp < 0x0FFF/14*7)){$ |1 _# A' C8 V" w5 ~' t/ O0 I
  13.                 return 4;
    ! u# G$ R6 q0 ?3 ]
  14.         }else if((btn_tmp > 0x0FFF/14*7) && (btn_tmp < 0x0FFF/14*9)){+ A* u$ X$ t5 Y- f- n& C
  15.                 return 5;
    , ?# X( ^" o; ^9 d. L
  16.         }else if((btn_tmp > 0x0FFF/14*9) && (btn_tmp < 0x0FFF/14*11)){& k2 Q$ a; _2 Q& H: s5 s1 U& V
  17.                 return 6;' A) H5 b# m& k; P& s5 V
  18.         }else if((btn_tmp > 0x0FFF/14*11) && (btn_tmp < 0x0FFF/14*13)){3 O' }% M9 v7 v
  19.                 return 7;
    " {+ b& s- R! B& f
  20.         }else if((btn_tmp > 0x0FFF/14*13) && (btn_tmp < 0x0FDF)){# w- s; w0 b7 Q3 P9 d
  21.                 return 8;
    7 D- G# v* Q" K! ]  h! ?: V
  22.         }8 _2 ^1 G$ j( p- |0 M% i4 p
  23.         else{! F) Z; j- \. O; z# w
  24.                 return 0;        //error status & no key, w/ @+ e  ?4 a( E3 X
  25.         }& p$ l+ u" X' L1 c; E9 ^, Z
  26. }
复制代码
$ u" @' t! b8 N4 B! t) z
4.按键控制

6 r2 p$ @: |* r' I
! ]6 K- ~1 n3 d, L# x# _ 20210604155033898.png
* P* o" J, d) H  l( t* q9 ^  R3 D/ K5 ~2 A4 b4 H
  1.                 adc = Scan_Btn();" i! ^5 ?. ?: w6 ]" l3 J
  2.                 sprintf((char *)ass,"The key is press:%d",adc);
    7 }3 @$ Y% ^& W0 L6 n7 h5 B
  3.                 LCD_DisplayStringLine(Line5,ass);& s' W4 B3 M. p+ l- R
  4.                 HAL_Delay(200);
复制代码

- r- ?$ V# P8 M" W% K5 |总结" M1 \/ T6 G' x) T# e
  i$ n2 D. |2 i; a  Q
20210604155133812.jpg 5 S$ _' _1 t7 x) e8 w! l) f. b
9 N" L$ c9 X$ x5 Y
赞 收藏 评论0 发布时间:2022-7-7 15:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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