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

STM32G0-Platformio+libopencm3-按键和外部中断

[复制链接]
STMCU小助手 发布时间:2023-2-23 21:00
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。
3 B# R8 ]: ]% d
1 新建项目
  • 在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
  • 新建完成后在src目录新建主程序文件main.c;
  • 然后更改项目文件platformio.ini的烧写和调试方式:

    $ ]4 {" N& f3 D1 ~0 t
  1. 1upload_protocol = cmsis-dap
    : s, g/ R* f# O# ~, E
  2. 2debug_tool = cmsis-dap
复制代码

. U8 _# S! r1 G1 r( j9 |7 a% a- b/ P
2 轮询方式使用按键
  • 设置GPIO为输入模式
    - }' E* t6 m+ \+ I4 u; }
  1. 1 //set gpio input button5 l! X3 o+ Q0 P! ]4 l
  2. 2 gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
复制代码
5 \3 O6 I0 y5 v0 e, I5 V( w
/ K0 c4 s! \  U" z4 g
  • 获取按键输入状态

      j- L5 |! |! C' ?9 p: w3 z
  1. 1while (1)
    ' S9 `) K8 o; b' g6 [# A6 ^
  2. 2{+ y' c( _% V; t' }
  3. 3    if(gpio_get(GPIOC,GPIO11)){
    : B* o$ D/ t3 {1 |0 Q& A* F, b# ~
  4. 4        gpio_toggle(GPIOC,GPIO12);- c1 ~' H4 b8 I/ f6 G/ }) W
  5. 5    }   
    6 p( e! ]+ n7 ^* t
  6. 6}  
复制代码
5 e/ |) T0 {1 d8 @! f0 H9 ?

& ]% w' w3 n% c
使用gpio_get获取按键的状态;
# V* i6 d4 I& v3 d$ n: [8 x, _
3 外部中断方式使用按键
  • 设置GPIO外部中断
    . ^8 v% ~5 q- }0 K2 I( F$ s
  1. 1void button_setup(void)
    7 c2 S" \' T; a3 M+ n3 h: B
  2. 2{
    * D- Y5 v' E) d/ K2 {) V+ T
  3. 3  rcc_periph_clock_enable(RCC_GPIOC);6 M  N" y5 U# t: t
  4. 4
    - G% z+ Z, `7 l5 s! F7 T
  5. 5  nvic_enable_irq(NVIC_EXTI4_15_IRQ);0 r$ o. E$ O$ f& Y: z
  6. 6
    ! `( |7 Y% M5 f. P" m5 i3 v4 i
  7. 7  gpio_mode_setup(GPIOC,
    + {/ H2 {; M1 w5 t9 [
  8. 8                GPIO_MODE_INPUT,2 C8 m1 E- N) d# a, g8 w
  9. 9                GPIO_PUPD_NONE,
    7 p; v* O6 K  E0 c6 _
  10. 10                GPIO11);" J6 n$ c: u3 {; `# {8 H& P
  11. 110 C8 y% C% k# c  S  o9 r( ^4 o
  12. 12  exti_select_source(EXTI11, GPIOC);
    / ]5 C$ l7 V- Z3 O8 C6 ^. K
  13. 13  exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);
    6 W8 [4 w# w7 l6 q& ^6 S9 c: f' _$ B; L- b
  14. 14  exti_enable_request(EXTI11);
    9 e  k# u, `3 `1 `
  15. 15}
复制代码

$ p0 p: N; y  ?$ _8 Y  ?! P& k9 y/ x
设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;

/ X' x& s$ X" @2 F- x
  • 中断函数
    ! m  |8 T- j" @! `* ^& B
  1. 1/**. h) S# ]. o  |
  2. 2 * @brief EXTI4-15 Interrupt service routine., {+ P9 V2 I% e4 C
  3. 3 */' |! s+ e& W, W! g* F
  4. 4void exti4_15_isr(void)
    ' Q. C2 R& }: l. h+ s  i
  5. 5{
    6 I% n5 t# X2 _4 @' |
  6. 6  exti_reset_request(EXTI11);& q/ O! D6 W5 j3 I. }- v+ T, G! S
  7. 71 B6 E; h5 R9 r$ d4 J/ s0 f
  8. 8  gpio_toggle(GPIOC, GPIO12);
    ) _% z. E7 q( |+ v8 \* O- d: j6 ]
  9. 9}
复制代码
: M3 J' s0 k/ r% l0 J  A! m/ y$ A

5 ]- M# P7 a3 c; n
外部中断4-15共用中断函数exti4_15_isr;

$ x6 A. |. T( |: e1 ~3 ^, h
转载自:MakerInChina.cn
8 S; U7 g9 I( R! R2 G0 K
收藏 评论0 发布时间:2023-2-23 21:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版