最近使用STm32G031K6做一款IOT产品,选择了用最新LL库进行开发,因为之前对LL库了解很少,所以开始的时候踩了很多坑,为防以后继续踩坑,现在做一个记录。
5 V6 j% W5 M; j: N* U E/ A
# N' m3 Y+ r3 ~; }' wGPIO初始化:; S) c0 U) O+ l& N! r
: z) b4 n1 {% g# g+ r- void STM32LLGpioInit(void)( v6 z1 O) ? g+ S4 N: p
- {- K" {! E E, J3 L8 g. @% P
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
0 i' \8 O- B3 a: u2 N - LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); //使能GPIOA时钟
6 b n7 x4 R$ ~# U7 [1 ]& x8 ~ - GPIO_InitStruct.Pin = gpioUSER_PIN_1|gpioUSER_PIN_2; //需要初始化的Pin,A端口的
) E, c! a; ^9 [! t# @! g - GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; //Pin的模式-可选输入、输出、模拟输入、复用
& _" N* Q! w3 d& N) {- p' l - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; //Pin的最大速率$ w8 \7 k* `. H8 e' V0 c
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; //输出类型-可选推挽、开漏
* i: E* U- G$ x" m# g - GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; //是否需要上拉,上拉的类型9 ]% r% i- ^8 h# J1 v; z9 Q
- LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
: G; x0 _ J% v - }
复制代码 - ` i7 `/ }4 X" ~" l% X# Q, h
GPIO的其他操作:( ]$ y* V! H* B3 [1 Y3 j
1 O, e+ y- G9 N4 q1 p( k5 ~- void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask); //设置io输出低
, d. W$ f7 d8 m0 |% [ - " f* U6 x; p. p! _0 k+ u% D
- void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);//Pin输出高
/ e) p: @% |# J( O - 2 L# g6 M: b# U" ^/ C1 V
- uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)//读取Pin状态6 Z% v. V V& x6 ^ e& `1 ?) b
: ^, X/ n P% j4 f- 6 b3 }1 I/ ]0 n& }& Q
- /*以上为常用的IO操作函数,其他详细的使用可以参考stm32g0xx_ll_gpio.h文件*/
复制代码
9 l' x$ s) o( }1 {" MGPIO的初始化和操作比较简单,做过其他STM产品开发的应该很好理解。; L" {" }% d! g1 E: F+ D
1 x5 ]$ I$ g9 q' |/ X# s
6 A( i$ G% a* M- t u. P Q) l
|