【ST NUCLEO-U575ZI-Q 测评 】HAL/LL库使用之GPIO-点灯
[复制链接]
前言
前面我们搭建了开发环境,这一篇就从最简单的GPIO点灯开始,体验HAL和LL库的操作。
过程
GPIO
参考手册的《13 General-purpose I/Os (GPIO)》
引脚
从原理图看到引脚PG2和PB7对应LED3和LED2,输出高点亮LED。
HAL/LL库
stm32u5xx_hal_gpio.c/h
stm32u5xx_ll_gpio.c/h
使用HAL库工程中需要定义宏
USE_HAL_DRIVER
使用LL库工程中需要定义宏
USE_FULL_LL_DRIVER
stm32u5xx_hal_conf.h中
#define HAL_GPIO_MODULE_ENABLED宏定义则会包含
对应头文件
#ifdef HAL_GPIO_MODULE_ENABLED
#include "stm32u5xx_hal_gpio.h"
#endif /* HAL_GPIO_MODULE_ENABLED */
stm32u5xx_hal_gpio.c的代码才会编译
HAL库只需要包含总的头文件#include "stm32u575xx.h"即可;
LL库需要包含对应的模块头文件#include "stm32u5xx_ll_gpio.h"。
GPIO操作
这里使用LL库。
先要使能对应的时钟要包含头文件#include "stm32u5xx_ll_bus.h"
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
我们从对应的头文件即可看到操作接口比如LL库的
ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx);
ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct);
void LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);
总的代码如下
#include "stm32u575xx.h"
#include "stm32u5xx_ll_gpio.h"
#include "stm32u5xx_ll_bus.h"
void delay(uint32_t t)
{
volatile uint32_t timeout = t;
while(t--);
}
int main(void)
{
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
LL_GPIO_InitTypeDef GPIO_InitStruct;
//LL_GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.Pin = LL_GPIO_PIN_7;
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
while(1)
{
delay(1000000ul);
LL_GPIO_TogglePin(GPIOB, 1u<<7);
}
}
仿真下载,云心可以看到蓝色LED开始闪烁,可以查看GPIO对应的寄存器
总结
得益于完善的库,操作外设非常简单高效,这一点STM是做的非常好的。需要注意的是使用外设一定要先使能对应的外设时钟。
|