最近使用STm32G031K6做一款IOT产品,选择了用最新LL库进行开发,因为之前对LL库了解很少,所以开始的时候踩了很多坑,为防以后继续踩坑,现在做一个记录。' q* c. {, C- k7 S
2 R+ Y* r% N2 u4 E+ N
GPIO初始化:
9 y2 o5 T3 }# e. n- Z3 [! q3 \ r6 E7 ~
- void STM32LLGpioInit(void)5 n7 D ]; q; J' L6 q1 d( a
- {
0 R7 ^7 l# [0 j3 M7 E$ y - LL_GPIO_InitTypeDef GPIO_InitStruct = {0};2 n: A5 m! n5 q* U$ }& |
- LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); //使能GPIOA时钟9 Z _5 L+ C4 b2 \9 }. E
- GPIO_InitStruct.Pin = gpioUSER_PIN_1|gpioUSER_PIN_2; //需要初始化的Pin,A端口的" P; i- n) k' M
- GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; //Pin的模式-可选输入、输出、模拟输入、复用
, K! S/ k3 g- k - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; //Pin的最大速率
; G3 h- |' H Y' [" S& M: [# m) I1 S0 n - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; //输出类型-可选推挽、开漏, O8 q+ i' _" a
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; //是否需要上拉,上拉的类型
& i. D( g* g- z% \. c# G5 w: r% M8 R - LL_GPIO_Init(GPIOA, &GPIO_InitStruct);! ]* L5 T8 P- C
- }
复制代码
) h0 A) `4 ]* m; hGPIO的其他操作:3 a9 e$ |* Z( e( e8 [* I
, f! ^7 F2 W* W- void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask); //设置io输出低' |! {2 r8 x! a# U) Z, h
/ h: q$ [2 t, x! H n4 b H8 o- void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);//Pin输出高( T1 v# G- F2 U4 M
- " r) O; d: ]! c& q5 X% m- h1 q
- uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)//读取Pin状态 [ S( T2 Z8 M1 h
- 0 F2 e. R' V4 [& `9 t
- - ~% @! K; w1 ~
- /*以上为常用的IO操作函数,其他详细的使用可以参考stm32g0xx_ll_gpio.h文件*/
复制代码
$ L. B+ ~( b1 ~$ Z" @, U4 \GPIO的初始化和操作比较简单,做过其他STM产品开发的应该很好理解。
: T: g) M* p# p2 s- G5 x3 A
+ A3 N) K& ^9 L) y J" B9 u
+ a' z2 x/ W7 I# E W0 O |