最近使用STm32G031K6做一款IOT产品,选择了用最新LL库进行开发,因为之前对LL库了解很少,所以开始的时候踩了很多坑,为防以后继续踩坑,现在做一个记录。
( f/ u7 @3 c! A4 u5 ^5 H' J' O) d2 c1 @: B: \# j% T
GPIO初始化:
' @; h! l$ h! y: y: [! O" G7 `8 @8 e! C
- void STM32LLGpioInit(void)) t, v( H. p. S4 ^' @( Y
- {
3 s8 u, m9 g5 X& @4 |& s5 C5 N - LL_GPIO_InitTypeDef GPIO_InitStruct = {0};# _+ J$ A9 U% F& [; ?# `% ?
- LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); //使能GPIOA时钟5 E, m" ^/ l( Z2 L' t* O) M
- GPIO_InitStruct.Pin = gpioUSER_PIN_1|gpioUSER_PIN_2; //需要初始化的Pin,A端口的
+ M* G9 U2 z; T( G( y1 }3 T6 ]# Y - GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; //Pin的模式-可选输入、输出、模拟输入、复用# I3 e- F ]& I. u; ^% v1 r
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; //Pin的最大速率
7 x- \/ m& s( N* Z - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; //输出类型-可选推挽、开漏
3 ?1 b' n* [7 F. D4 z# h* D - GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; //是否需要上拉,上拉的类型
6 v- v. R; |0 a, F! `- @" m8 B - LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+ H5 {' p& u# V; \7 G - }
复制代码 # u) s. k8 G8 ]0 o$ b
GPIO的其他操作:% `, b; I# d# ? H; M a0 X
2 ]) d5 z2 e5 m- void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask); //设置io输出低; H2 e m: _0 p. \3 R K
0 q7 W+ }& J9 h: w" r. Y1 J- void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);//Pin输出高
6 ?" d7 p _! I; g1 I% [' w
, ]# X& M* d' p$ i5 w' O. ]# j- uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)//读取Pin状态
2 j8 A. P# s) N1 W7 d: w1 M
$ r+ ^5 W5 c# C: g- ( ~# p4 @) }$ n% f* @: A
- /*以上为常用的IO操作函数,其他详细的使用可以参考stm32g0xx_ll_gpio.h文件*/
复制代码 7 z5 h* _, B2 d8 H
GPIO的初始化和操作比较简单,做过其他STM产品开发的应该很好理解。1 C' c/ h3 G# h% }" l/ H
) H, q$ X+ ], `% r8 }8 m! S8 t
7 E6 A; g2 \& g5 `. B9 o) V" ^ |