最近使用STm32G031K6做一款IOT产品,选择了用最新LL库进行开发,因为之前对LL库了解很少,所以开始的时候踩了很多坑,为防以后继续踩坑,现在做一个记录。
1 V$ p; ?+ z9 ^3 ` k
8 u4 r9 I" u0 n) U2 ?8 j1 {- @GPIO初始化:
* }. |& i" @" r6 j& w m1 I7 w* n: o5 ?# I
- void STM32LLGpioInit(void)
& m0 e$ u0 S. s+ M2 g - {
; K7 n) Z% O& m - LL_GPIO_InitTypeDef GPIO_InitStruct = {0};9 m. Z" o; n7 H5 W Z
- LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); //使能GPIOA时钟
* d$ S4 h! M+ |& E) l# f - GPIO_InitStruct.Pin = gpioUSER_PIN_1|gpioUSER_PIN_2; //需要初始化的Pin,A端口的2 B+ |1 J7 w" g2 I$ R$ K
- GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; //Pin的模式-可选输入、输出、模拟输入、复用
. r+ @9 B5 k" W% R+ ]8 T5 T - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; //Pin的最大速率
/ k# C! Z4 M) f$ D w7 {2 z - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; //输出类型-可选推挽、开漏
3 b9 k/ W; [# @8 H" R - GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; //是否需要上拉,上拉的类型
3 x4 \9 V4 K" u2 Y( [( p5 J% A1 P - LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
0 d; z# k6 ?5 T' W" n. m0 e - }
复制代码
/ U( e" x9 ]# t- Z: SGPIO的其他操作:
4 T' K L N7 Z0 m* H4 }- ' R, F/ [- t/ H* }
- void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask); //设置io输出低 r2 o4 l% \7 Q9 b. |% u) O
( }9 p% g& D0 Q- t7 u; D' G- void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);//Pin输出高: @) R L9 ?3 N8 {
- ) c6 n9 T8 b6 A% H
- uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)//读取Pin状态6 ~! J2 p# F) T( A
- 3 @% Y6 a1 w" C" f9 a
- ' b1 X4 b+ A7 e$ S
- /*以上为常用的IO操作函数,其他详细的使用可以参考stm32g0xx_ll_gpio.h文件*/
复制代码 # _2 ~( j$ }& Z4 g
GPIO的初始化和操作比较简单,做过其他STM产品开发的应该很好理解。: M) ^2 n6 |, X3 J3 {! \) {
5 ?' k8 S4 x' f1 M3 O% Q5 |5 a. p
. E( B$ l% a7 g* b* F |