使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。
8 \* Z: \) [" e. O5 U- l& q; h 1 新建项目在PIO主页新建项目button,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB; 新建完成后在src目录新建主程序文件main.c; 然后更改项目文件platformio.ini的烧写和调试方式: x+ r R, P' _6 J& p
- 1upload_protocol = cmsis-dap4 Z5 q2 ^; E* X4 @0 f: S2 L. Z
- 2debug_tool = cmsis-dap
复制代码
) x* F) j q3 j2 p' g3 X; \, Q2 l% s, _0 I9 q( N2 V0 Z, I
2 轮询方式使用按键设置GPIO为输入模式
: P; l; l2 Z, \1 g3 v4 V9 T
- 1 //set gpio input button
* j$ r. T: d( N7 n0 x - 2 gpio_mode_setup(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO11);
复制代码
9 m1 t% p: n7 O/ d4 W' P7 T! l$ ]8 a3 u2 X7 J
获取按键输入状态 & E, b$ O" [" p1 F
- 1while (1)4 a, X: k2 T. U* G; P
- 2{
! i8 Q- U h. O4 {- v( A) f! I4 ? - 3 if(gpio_get(GPIOC,GPIO11)){
* O4 l4 Y3 U6 P' J: }' \ - 4 gpio_toggle(GPIOC,GPIO12);0 J$ J `8 B0 }9 x
- 5 }
! K9 m/ o. N7 I+ P- Z- a. s - 6}
复制代码
$ o6 Q5 x% D. b& ?9 B* }& s
; N ^# x: y# |7 }. P( U使用gpio_get获取按键的状态; " P; }$ i( U2 d1 }8 Y
3 外部中断方式使用按键设置GPIO外部中断
2 e# i$ G6 \$ i/ o# t q
- 1void button_setup(void)
; l2 a0 V$ V- I6 I - 2{
% b% s9 s" R, t9 s$ \0 `* D - 3 rcc_periph_clock_enable(RCC_GPIOC);
& y" _- k6 Q4 k1 S. ~7 u - 4
, E9 D/ V5 @& T. d, i - 5 nvic_enable_irq(NVIC_EXTI4_15_IRQ);( _3 c( c' D2 P' y( Z
- 6
; [; T7 R5 Y- H ]6 j, q - 7 gpio_mode_setup(GPIOC,
! W# c9 B- k& K; X - 8 GPIO_MODE_INPUT,2 x) K. j2 ?1 s# ?
- 9 GPIO_PUPD_NONE,1 V* l1 @+ X; s6 N" l1 A
- 10 GPIO11);0 N/ {8 x- ?0 ~& g$ \' N6 ?
- 11
2 V( |" ]) u5 s9 S$ x2 k - 12 exti_select_source(EXTI11, GPIOC);
- t$ v* d) |: T W* j/ B1 o - 13 exti_set_trigger(EXTI11, EXTI_TRIGGER_FALLING);
n/ |5 Y0 ? _ - 14 exti_enable_request(EXTI11);
) b* E4 U* F% v) x - 15}
复制代码 . |) u2 W: P6 ]0 L
' n d8 t% b; }/ Z _4 y2 v7 G5 y设置GPIOC11外部中断,引脚设置为输入模式,然后开启中断,并设置中断下降沿触发方式;
: G+ u- Q U; O* F+ z; S
中断函数
0 e) L! H( E( i) E2 x/ W
- 1/**
6 c0 t Y) _4 j0 U9 Y4 ^- k - 2 * @brief EXTI4-15 Interrupt service routine.
2 m6 m \# r) m! N: k - 3 */# A3 ?6 I- p- m5 B! @" \
- 4void exti4_15_isr(void)0 M6 \& _! [8 N0 B
- 5{
( _# S5 p' x$ N - 6 exti_reset_request(EXTI11);" {8 `& F+ A6 H# ]
- 78 T( y5 F% X w- l. i! `! X
- 8 gpio_toggle(GPIOC, GPIO12);
! U6 c2 t$ X$ M! v+ F' s$ L - 9}
复制代码
3 v: o; D: o2 K- z" T; h3 w
) X" }! m/ r. u- j外部中断4-15共用中断函数exti4_15_isr;
9 i$ | C. O2 _- ]7 M# b9 N3 ~, c
转载自:MakerInChina.cn
0 }& m) g, c% C4 h3 R" o, I |