最近使用STm32G031K6做一款IOT产品,选择了用最新LL库进行开发,因为之前对LL库了解很少,所以开始的时候踩了很多坑,为防以后继续踩坑,现在做一个记录。
0 j& }6 G; X R6 b0 Z
5 N$ Z6 l& E( {3 }# ?6 ], [GPIO初始化:
' x/ o; @8 `, g0 ]
0 `" N9 N4 o* H5 I5 t; t/ s- void STM32LLGpioInit(void)
& z" \% J* ^1 b3 {3 ?. c+ O, I9 p - {! N- R0 d4 O: L5 i
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};( ]$ d) _( j5 J& i' |; X* x
- LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); //使能GPIOA时钟
: w, E8 _# k! \7 \ - GPIO_InitStruct.Pin = gpioUSER_PIN_1|gpioUSER_PIN_2; //需要初始化的Pin,A端口的$ d% `: Q+ C7 e+ w
- GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; //Pin的模式-可选输入、输出、模拟输入、复用
1 \# b- a9 M$ f6 t7 J1 l# n - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; //Pin的最大速率
( b( S1 a8 k `- a. m. b - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; //输出类型-可选推挽、开漏& i1 U/ W# R$ V/ p9 Q+ A$ ~
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; //是否需要上拉,上拉的类型3 g# W! X3 |! a8 }# i4 p
- LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+ g( I1 T$ c3 J0 N: q - }
复制代码
: ~9 Y4 m I" Q& e) h) zGPIO的其他操作:
: h W; ~, |% l
8 s* i2 S7 Q0 b+ O- D8 P5 I) O+ G- void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask); //设置io输出低6 B0 o* ]7 }; x, o
- " y) ?( E7 X9 H) k9 _- B. C
- void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);//Pin输出高; R9 Y/ R3 x9 r8 n) I4 ~
; ?7 J& `' Y4 i3 D6 E' ^0 L- uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)//读取Pin状态5 F6 b7 E+ N4 N1 m( Z) |
- # r+ O5 F3 }5 Y' g
- ) y6 R- C1 m0 e) c0 e1 C! S
- /*以上为常用的IO操作函数,其他详细的使用可以参考stm32g0xx_ll_gpio.h文件*/
复制代码
V" R/ k3 E% q5 W" L1 xGPIO的初始化和操作比较简单,做过其他STM产品开发的应该很好理解。
5 u8 U( {* f8 B" x& b/ w! e% ]1 ~, a% O6 X
" W2 _! S% {0 ^+ ?/ G' L- S
|