|
使用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 }
- 1upload_protocol = cmsis-dap+ U3 D$ o* h( t1 j* g
- 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 //set gpio input button D+ y n6 j7 z5 f9 i0 O2 n
- 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
- 1while (1), D5 ^. X5 |' f! Z6 I* b2 N
- 2{
7 a2 @+ v z* T( U3 ` - 3 if(gpio_get(GPIOC,GPIO11)){, q/ {7 Z5 z$ A% g
- 4 gpio_toggle(GPIOC,GPIO12);! G5 r, U/ t( T5 w' ~0 C
- 5 } 4 [4 t, w7 Q$ }
- 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
- 1void button_setup(void)
+ E3 o# d- A# m1 M5 {& P% G# b - 2{- M7 y- R y8 S7 v1 L
- 3 rcc_periph_clock_enable(RCC_GPIOC);8 r9 a3 T) w- u$ S0 ^
- 4 G+ T0 h: N2 F( I
- 5 nvic_enable_irq(NVIC_EXTI4_15_IRQ);3 S; c! n3 `; Q- \# r; l4 }
- 6
2 X) t# | M/ N( [2 e - 7 gpio_mode_setup(GPIOC,
1 B7 D6 i* } w+ y1 [2 | - 8 GPIO_MODE_INPUT,
* H' k) y9 S$ r' g' p- V: U - 9 GPIO_PUPD_NONE,
; U6 r% p. }9 p W - 10 GPIO11);
! N0 C. V5 |, L j - 11" [7 l9 U' }# S( O2 {4 L
- 12 exti_select_source(EXTI11, GPIOC);
9 c" X, _1 z& J' {& c' d0 n; f - 13 exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);! O6 Q9 j" {) `8 ^; J# @1 Z
- 14 exti_enable_request(EXTI11);7 K$ ~# g6 m" H" e1 n) c" c2 i
- 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/**8 K: h" \- ^; q- o+ K
- 2 * @brief EXTI4-15 Interrupt service routine.
. E) u( d% w$ F& _8 x, z - 3 */
) s% O6 w0 y' x - 4void exti4_15_isr(void)
: D4 G8 E' Z) W7 s( a8 d - 5{/ z% q6 U7 \+ u
- 6 exti_reset_request(EXTI11);
9 p& ^: H9 I% A2 Y0 y9 N - 7
5 T; u+ t, L4 X/ e& R" ^ - 8 gpio_toggle(GPIOC, GPIO12);
0 V# J/ N/ D: @# ? - 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 |