最近使用STm32G031K6做一款IOT产品,选择了用最新LL库进行开发,因为之前对LL库了解很少,所以开始的时候踩了很多坑,为防以后继续踩坑,现在做一个记录。
+ P0 J/ V4 c& h% P# L" b8 _8 J$ [: L3 t+ E4 r* y# _ i# k
GPIO初始化:
. [* F0 t) R. E5 q( l/ F: t) e* Q. Q7 v
- void STM32LLGpioInit(void)# N" y0 p; w: U: O, L/ H
- {4 M; u# G$ J& x' I# L! |4 ~
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};* g% b6 O, |! K7 @( X
- LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); //使能GPIOA时钟
* F8 {+ a/ l. Z: V$ W - GPIO_InitStruct.Pin = gpioUSER_PIN_1|gpioUSER_PIN_2; //需要初始化的Pin,A端口的8 J4 m- _7 O0 l3 |4 k8 B
- GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; //Pin的模式-可选输入、输出、模拟输入、复用( W2 n# L7 N0 T2 c/ p
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; //Pin的最大速率- s8 Q$ E% b2 m
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; //输出类型-可选推挽、开漏
1 ~, ]3 F/ h% u7 V - GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; //是否需要上拉,上拉的类型* Q( F( c: s, _8 H T) j2 i
- LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
3 a7 R& q. f9 d9 ~0 W - }
复制代码
6 b8 e! N8 h# F. B$ ZGPIO的其他操作:- S9 ?6 ]# p& z% F# e
- - i7 z2 ]2 W( x* D' A' E
- void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask); //设置io输出低2 Z( z3 h- a7 \% d* x2 V b
! p3 d2 |8 N0 ^- void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);//Pin输出高5 |& `; ~% m) T0 t k
- + E- _; b& ?& k* k
- uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)//读取Pin状态
; r" w- y$ i) c# I- X3 U/ \
s, v! M6 p X! h- & t: P" q4 j. R
- /*以上为常用的IO操作函数,其他详细的使用可以参考stm32g0xx_ll_gpio.h文件*/
复制代码
6 `6 k" R. X4 m( K" `GPIO的初始化和操作比较简单,做过其他STM产品开发的应该很好理解。4 x; l. j' |: G5 W/ I
0 e8 q9 v- w# w# f( v
" f6 P: c5 z z |