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

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

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

[复制链接]
STMCU小助手 发布时间:2023-2-23 21:00
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。
4 B7 |! \/ v  d6 M& W( F% u2 X
1 新建项目
  • 在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
  • 新建完成后在src目录新建主程序文件main.c;
  • 然后更改项目文件platformio.ini的烧写和调试方式:
    & `& W( [! ?$ R: h1 s$ ?, h1 I
  1. 1upload_protocol = cmsis-dap' ^- i7 k9 P- {
  2. 2debug_tool = cmsis-dap
复制代码
5 ]+ f  V% w9 E$ i' C6 S: f$ ~
. p' A$ e# p6 Q3 P
2 轮询方式使用按键
  • 设置GPIO为输入模式

    % i. t  z& K, A/ _1 T0 @
  1. 1 //set gpio input button
    $ L2 \* d8 j2 S0 R( X) J4 E
  2. 2 gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
复制代码
' S) [7 j9 P  B/ l4 r( B3 ^
* }* }& E" [! C3 f( e7 x6 v
  • 获取按键输入状态
    & Q8 {6 q+ A/ u/ s) ~6 n
  1. 1while (1)$ j# l: V( r* \  ?
  2. 2{1 m# A7 s# P8 }% V& p# P. b
  3. 3    if(gpio_get(GPIOC,GPIO11)){
    7 e# x, t3 R9 ]2 m5 i7 G  i; a
  4. 4        gpio_toggle(GPIOC,GPIO12);$ A- }( A6 r# d3 h! v9 t6 i9 x( B
  5. 5    }   
    : }4 f$ C7 u* r6 C& d
  6. 6}  
复制代码
7 g( g' n3 _) I$ j3 X/ w

, T1 {+ Z) b2 [8 j5 u& P5 X
使用gpio_get获取按键的状态;

9 ~& W* D. c: J0 G! \9 u0 n
3 外部中断方式使用按键
  • 设置GPIO外部中断

    2 T) A" m( x+ L5 C
  1. 1void button_setup(void)
    % M" s. b5 d# G9 h: |. ~
  2. 2{
    ( N# s3 a: w' M) `% \& b
  3. 3  rcc_periph_clock_enable(RCC_GPIOC);' l# _' H- L# y% v/ O6 e3 q1 k& R$ E
  4. 48 s# `* z/ A, u. B
  5. 5  nvic_enable_irq(NVIC_EXTI4_15_IRQ);
    % @6 y4 j3 k. w& A$ s  @
  6. 6
    9 c0 x$ V3 b/ G2 ]: [: ~7 S$ _
  7. 7  gpio_mode_setup(GPIOC,
    : e# P' s8 [% q/ l% y" y$ @
  8. 8                GPIO_MODE_INPUT,
    8 R' a# e5 P4 Q' B1 j. T0 H
  9. 9                GPIO_PUPD_NONE,
    3 l( M" c9 G7 |% A" |
  10. 10                GPIO11);
    3 F$ X& |$ ~' |# H3 q
  11. 11; v/ e6 e% m! H8 {0 y" C. \
  12. 12  exti_select_source(EXTI11, GPIOC);! s+ ]% @+ V9 T5 R
  13. 13  exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);
    9 \" f7 I, E, V: b1 A+ }7 r, k& n) _
  14. 14  exti_enable_request(EXTI11);
    / F8 n. E; E" J9 J
  15. 15}
复制代码

. b7 x1 e3 l5 Q$ u) S
# U. W& L0 T' G
设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;
' ]' i4 [& f6 P( s- @4 p
  • 中断函数

    4 Q5 o% R  {9 M8 R
  1. 1/**
    , E* H6 o* w1 O- G: g2 V+ Q5 s
  2. 2 * @brief EXTI4-15 Interrupt service routine.
    ) b; R5 l) N- y6 }7 _& w/ j3 U
  3. 3 */* l) W4 M. t) V' o8 J
  4. 4void exti4_15_isr(void)6 N3 ]. v6 S- @* b4 C
  5. 5{
    3 j, h" A- {8 {3 h" s# s
  6. 6  exti_reset_request(EXTI11);/ T3 Q! w0 D4 a7 ~; d
  7. 7
    . p2 F3 K6 X! N
  8. 8  gpio_toggle(GPIOC, GPIO12);8 V( c$ Z$ i- }1 W3 D  f5 V
  9. 9}
复制代码
! `1 F4 H$ _1 N, O, [/ r

- R, y1 K) a( U0 P' a
外部中断4-15共用中断函数exti4_15_isr;

* ]3 X6 |/ q  z/ z! u& L) G' m
转载自:MakerInChina.cn

% g& ]* U' y# J0 u# d6 j4 r* ^
收藏 评论0 发布时间:2023-2-23 21:00

举报

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