使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。 + r$ ]- ~* V% p' ~; B' M
1 新建项目在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB; 新建完成后在src目录新建主程序文件main.c; 然后更改项目文件platformio.ini的烧写和调试方式:
3 P6 q( q" @. L# u) u- a! m8 Q/ A
- 1upload_protocol = cmsis-dap
' J. f; d8 K- }3 H5 i4 M - 2debug_tool = cmsis-dap
复制代码 2 E- C L5 [6 p" K& O% B
0 N" W1 q- x) N: ?7 l& Y) j
2 轮询方式使用按键设置GPIO为输入模式
4 n& t" M8 J7 X2 e& b: M
- 1 //set gpio input button
% [2 C% _! K- H- L! u - 2 gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
复制代码
( O, m$ _, l$ _4 k d$ h/ b; M3 F
获取按键输入状态
) F( h- m9 R; h3 Z" U3 a
- 1while (1)
$ W! ]( ~1 K, D - 2{
0 V+ I- o) a% w' L- V8 j! y5 _ - 3 if(gpio_get(GPIOC,GPIO11)){0 o* u& l3 y6 x) J: Q
- 4 gpio_toggle(GPIOC,GPIO12);1 T- {* ]5 s1 K9 ]
- 5 }
% Q5 Q n1 A3 ]4 ?, V: ^8 v; I& t - 6}
复制代码 ! j8 y; i: n* V: m
/ m6 e9 P, M, E使用gpio_get获取按键的状态; 3 k1 n, l& E& t
3 外部中断方式使用按键设置GPIO外部中断 9 X ?$ }2 L7 m; [0 ^8 f7 K
- 1void button_setup(void)) y" k% K$ j Z1 s% O
- 2{
( m- l# @5 D( b. r - 3 rcc_periph_clock_enable(RCC_GPIOC);. e9 ^8 J# E2 R
- 4
/ G, y2 T9 v# }2 j* w$ H - 5 nvic_enable_irq(NVIC_EXTI4_15_IRQ);
# x$ e. Q( T Q+ n) y - 6
- S! o6 n" d3 o8 t5 B - 7 gpio_mode_setup(GPIOC," G t6 A. h- D
- 8 GPIO_MODE_INPUT,
3 C& S4 h7 W7 {7 y - 9 GPIO_PUPD_NONE,: ?* Z2 Q, P! P& A* ]# B% A
- 10 GPIO11);
$ G3 O6 ~3 n2 w( s9 y* Z5 f - 11
+ F3 l B- k# J8 |7 ~ z! p) i2 g - 12 exti_select_source(EXTI11, GPIOC);* [6 o. p- T( b* Z$ G9 x, \% f2 w9 p3 T
- 13 exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);
! h. B. K$ Q% v/ f3 E7 W0 R9 g - 14 exti_enable_request(EXTI11);8 D) o+ o, ^$ S5 X% t6 h% ?" P
- 15}
复制代码 ' E1 b ?9 x1 L3 @; |4 W
; _# D" A" }2 ?
设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式; 9 z( p1 v5 y/ R8 i7 P5 B, k
中断函数
7 L' _, Y9 c) X/ O6 P* |% W- C! {
- 1/**
0 V: m$ K7 k8 D - 2 * @brief EXTI4-15 Interrupt service routine.4 x% A" `' _) ~3 v; I
- 3 */' R& {; o$ k2 U+ b+ E- x& p- A* b
- 4void exti4_15_isr(void)
) m, W) ~5 n' D( N2 j' v0 M2 V4 ^ - 5{
2 k8 n; V6 s4 K: Y( l% u/ } - 6 exti_reset_request(EXTI11);
L2 J) R$ {% o& |! W/ g5 ^ - 7( R" h- I/ W- i/ Q7 ]: V8 L7 y5 m( s
- 8 gpio_toggle(GPIOC, GPIO12);, B& L5 t8 Z+ a4 n
- 9}
复制代码
2 m! S* J1 ]; `, {0 G
3 x7 G* {, M" W W外部中断4-15共用中断函数exti4_15_isr;
7 B2 }. m8 h# Y6 R" q) V
转载自:MakerInChina.cn
4 d* A0 s4 h! W$ [$ P0 ^3 W, \+ O6 r |