最近使用STm32G031K6做一款IOT产品,选择了用最新LL库进行开发,因为之前对LL库了解很少,所以开始的时候踩了很多坑,为防以后继续踩坑,现在做一个记录。5 |# Z/ H+ E/ w/ c
9 M/ G8 p2 N* S
GPIO初始化:
7 N/ b6 R5 v# ^% j; Y4 j0 G! j! B6 R9 L* H4 ]
- void STM32LLGpioInit(void)
1 Q" R8 N# h# f$ C$ Z - {$ y8 I% S+ q. Z7 o
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};9 C* C# M; ]0 w
- LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); //使能GPIOA时钟% t3 f! s& x- X
- GPIO_InitStruct.Pin = gpioUSER_PIN_1|gpioUSER_PIN_2; //需要初始化的Pin,A端口的
/ w: E8 e1 D7 g6 } - GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; //Pin的模式-可选输入、输出、模拟输入、复用$ X) e( D/ s( f" M) K
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; //Pin的最大速率1 E2 B" b: n' g
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; //输出类型-可选推挽、开漏" a& k. T# \8 F6 L5 K8 H1 U U& F
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; //是否需要上拉,上拉的类型1 U) ~1 z5 ^4 f
- LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
# F, |7 b. ], R3 u8 c# i - }
复制代码
4 U7 f B7 l" U( F8 xGPIO的其他操作:
6 R3 Y) R3 L8 c J
; [: b% w) w( ]" n- void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask); //设置io输出低
6 N: [5 r6 {# X/ }% N - * B/ w# ^4 S* E! U. ~
- void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);//Pin输出高9 A( s% f- t" x6 i. b; E: P% ]
3 Y( M/ Y# b+ j; [' q) }- uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)//读取Pin状态2 H* U3 |8 y! R' P! z
/ F' f# O; X- M' v. E- ^9 Y% p4 T, e- 4 v+ v# a3 g2 p# l
- /*以上为常用的IO操作函数,其他详细的使用可以参考stm32g0xx_ll_gpio.h文件*/
复制代码
8 s# V4 |) Q# W/ F; y. wGPIO的初始化和操作比较简单,做过其他STM产品开发的应该很好理解。6 a, A( g1 x: L8 ?) }" s/ _
6 S2 |- T+ N7 Z' x5 z( @
: {. Q' ]; Z( y/ G+ C4 ~: t |