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

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

[复制链接]
STMCU小助手 发布时间:2023-2-23 21:00
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。
) C) i2 p7 D6 {
1 新建项目
  • 在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
  • 新建完成后在src目录新建主程序文件main.c;
  • 然后更改项目文件platformio.ini的烧写和调试方式:
    $ l  O* Z, K% [) u) j. |5 X; ?% p1 }
  1. 1upload_protocol = cmsis-dap+ U3 D$ o* h( t1 j* g
  2. 2debug_tool = cmsis-dap
复制代码
! u7 O+ B+ \; W9 j0 H' t% m
; b% t4 V6 c& e( W: l0 B5 I
2 轮询方式使用按键
  • 设置GPIO为输入模式

    - E9 K# {8 T! f; D
  1. 1 //set gpio input button  D+ y  n6 j7 z5 f9 i0 O2 n
  2. 2 gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
复制代码

4 c1 x8 I# d) r: ?* ^' p
5 O  I0 E  `& _! F. ~
  • 获取按键输入状态

    , O$ ?8 o7 m! h- V# C
  1. 1while (1), D5 ^. X5 |' f! Z6 I* b2 N
  2. 2{
    7 a2 @+ v  z* T( U3 `
  3. 3    if(gpio_get(GPIOC,GPIO11)){, q/ {7 Z5 z$ A% g
  4. 4        gpio_toggle(GPIOC,GPIO12);! G5 r, U/ t( T5 w' ~0 C
  5. 5    }    4 [4 t, w7 Q$ }
  6. 6}  
复制代码

% D% N- Y# M( g4 V$ q% s0 ~3 E/ R: ]3 B/ ?9 g: s3 q
使用gpio_get获取按键的状态;

! c' D# W; j- k4 _
3 外部中断方式使用按键
  • 设置GPIO外部中断
    3 T1 f) i" B! F9 y, v
  1. 1void button_setup(void)
    + E3 o# d- A# m1 M5 {& P% G# b
  2. 2{- M7 y- R  y8 S7 v1 L
  3. 3  rcc_periph_clock_enable(RCC_GPIOC);8 r9 a3 T) w- u$ S0 ^
  4. 4  G+ T0 h: N2 F( I
  5. 5  nvic_enable_irq(NVIC_EXTI4_15_IRQ);3 S; c! n3 `; Q- \# r; l4 }
  6. 6
    2 X) t# |  M/ N( [2 e
  7. 7  gpio_mode_setup(GPIOC,
    1 B7 D6 i* }  w+ y1 [2 |
  8. 8                GPIO_MODE_INPUT,
    * H' k) y9 S$ r' g' p- V: U
  9. 9                GPIO_PUPD_NONE,
    ; U6 r% p. }9 p  W
  10. 10                GPIO11);
    ! N0 C. V5 |, L  j
  11. 11" [7 l9 U' }# S( O2 {4 L
  12. 12  exti_select_source(EXTI11, GPIOC);
    9 c" X, _1 z& J' {& c' d0 n; f
  13. 13  exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);! O6 Q9 j" {) `8 ^; J# @1 Z
  14. 14  exti_enable_request(EXTI11);7 K$ ~# g6 m" H" e1 n) c" c2 i
  15. 15}
复制代码

) L/ f+ b0 n( ~
' z) O0 Y* M) j; m+ A
设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;
9 J3 r+ r+ W* O& u$ h: [* ~- E
  • 中断函数
      }3 \+ V* ?6 I3 D' l) A3 C# ]
  1. 1/**8 K: h" \- ^; q- o+ K
  2. 2 * @brief EXTI4-15 Interrupt service routine.
    . E) u( d% w$ F& _8 x, z
  3. 3 */
    ) s% O6 w0 y' x
  4. 4void exti4_15_isr(void)
    : D4 G8 E' Z) W7 s( a8 d
  5. 5{/ z% q6 U7 \+ u
  6. 6  exti_reset_request(EXTI11);
    9 p& ^: H9 I% A2 Y0 y9 N
  7. 7
    5 T; u+ t, L4 X/ e& R" ^
  8. 8  gpio_toggle(GPIOC, GPIO12);
    0 V# J/ N/ D: @# ?
  9. 9}
复制代码

( m8 O2 S+ q" }9 ?8 r* D
+ A8 M7 O! q# Q. ~
外部中断4-15共用中断函数exti4_15_isr;
% `% E5 V: D; Z" h) r; S) c
转载自:MakerInChina.cn

3 X' l, M" {& j' ^! v
赞 收藏 评论0 发布时间:2023-2-23 21:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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