最近使用STm32G031K6做一款IOT产品,选择了用最新LL库进行开发,因为之前对LL库了解很少,所以开始的时候踩了很多坑,为防以后继续踩坑,现在做一个记录。1 s& N. Y; \, v3 j- V2 [
" B+ ]4 _ `: U4 EGPIO初始化:* @3 v/ K- b: D& H) ~# c! }
, R6 B H" M* u8 I/ ?
- void STM32LLGpioInit(void)$ f' R( c! C. Y& m: z& t3 [7 W
- {
. X! G' i* u1 u6 p! C. d1 ] - LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
6 q% ^& H8 t+ s4 D- Q, b7 D& {' Y - LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); //使能GPIOA时钟
; v5 k1 V2 F1 G9 l$ ?# q - GPIO_InitStruct.Pin = gpioUSER_PIN_1|gpioUSER_PIN_2; //需要初始化的Pin,A端口的
9 B9 m' P' ~/ ?- U# y( j% H - GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; //Pin的模式-可选输入、输出、模拟输入、复用
- Z! h8 C, i6 S, S$ S - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; //Pin的最大速率
' l w t1 ~) x3 s# \5 u& v - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; //输出类型-可选推挽、开漏
. j' Y: x$ ~8 c3 w* T D - GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; //是否需要上拉,上拉的类型2 n6 e8 M2 d8 f) W7 _
- LL_GPIO_Init(GPIOA, &GPIO_InitStruct);- J: c" Y- T% h
- }
复制代码
M7 V; T1 O( U5 G! yGPIO的其他操作:
5 H9 R8 z2 W+ w& C7 K. J- % B1 ?; B5 \! n; y) v6 n5 k
- void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask); //设置io输出低
+ K, j* Y6 X" C1 @; g - 4 M+ X) m0 ]# }& ]9 k
- void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);//Pin输出高
( X: w9 d: T9 t8 D, u" e% U7 s - 5 E5 p+ d2 g/ P
- uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)//读取Pin状态
2 U( x6 O V/ k- e. l
4 b0 x% ]8 }6 n) X3 w- 7 n! X* M( a$ l6 W7 @: X. h
- /*以上为常用的IO操作函数,其他详细的使用可以参考stm32g0xx_ll_gpio.h文件*/
复制代码
. O3 M1 y* A4 n: e: oGPIO的初始化和操作比较简单,做过其他STM产品开发的应该很好理解。
% n! V' b+ }( Y0 b) V6 p. Y, c, S4 ~/ C% a
, z+ Z8 I9 ]% I6 O7 m }: ~& X8 | |