最近使用STm32G031K6做一款IOT产品,选择了用最新LL库进行开发,因为之前对LL库了解很少,所以开始的时候踩了很多坑,为防以后继续踩坑,现在做一个记录。
) O" {5 I! E' o, J
7 e Q7 P9 A# {( iGPIO初始化:
# B* n% L% t) [9 B4 ^6 Y" v/ x/ e& |5 c! w: e }! y8 Y
- void STM32LLGpioInit(void)- P5 J' q+ Y0 n; {$ p
- {( }7 q: O, N$ r! P
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
0 V2 f- H; V) o& b - LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); //使能GPIOA时钟& I6 y5 C4 N2 v( d7 ?
- GPIO_InitStruct.Pin = gpioUSER_PIN_1|gpioUSER_PIN_2; //需要初始化的Pin,A端口的
: R& ~7 z' i N - GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; //Pin的模式-可选输入、输出、模拟输入、复用5 o2 w5 [6 {0 c
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; //Pin的最大速率1 f- `" W+ S8 R- Z: f$ B% G
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; //输出类型-可选推挽、开漏, C, e C5 A1 ~/ x @. A: U3 w2 N- C$ W
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; //是否需要上拉,上拉的类型1 F% b! _7 i' I/ B1 {
- LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
" f5 u6 u4 I) k, k1 h9 H/ N' z2 |. L - }
复制代码 2 f. D5 `- O2 P6 y! _
GPIO的其他操作:9 g" v; s* H5 o# C" D
- 7 R* c; K6 t! c1 F
- void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask); //设置io输出低! M, t8 o6 I, c0 J8 k: r% n8 z# V
- 0 B. C0 p& \9 O7 S
- void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);//Pin输出高
! J) J( x8 u$ K* Y. @' u& @; ^
( }6 V! D, x. S- uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)//读取Pin状态
2 ^$ `2 V% t, x2 e& a! [" {" N
' |: U7 ~" h/ ^( m- & F% U* ~0 P1 M
- /*以上为常用的IO操作函数,其他详细的使用可以参考stm32g0xx_ll_gpio.h文件*/
复制代码 ' k( Q% b6 H7 Q
GPIO的初始化和操作比较简单,做过其他STM产品开发的应该很好理解。+ z8 C( t9 K& V, t6 m3 X8 e
% o n$ ]) O0 G0 \$ w
" W( f5 F8 n$ L; r
|