【ST NUCLEO-U575ZI-Q 测评 】HAL/LL库使用之GPIO-点灯
<h1><b>前言</b></h1><p >前面我们搭建了开发环境,这一篇就从最简单的GPIO点灯开始,体验HAL和LL库的操作。</p>
<h1 ><b>过程</b></h1>
<h2 ><b>GPIO</b></h2>
<p >参考手册的《13 General-purpose I/Os (GPIO)》</p>
<h2 ><b>引脚</b></h2>
<p >从原理图看到引脚PG2和PB7对应LED3和LED2,输出高点亮LED。</p>
<p > </p>
<h2 ><b>HAL/LL库</b></h2>
<p >stm32u5xx_hal_gpio.c/h</p>
<p >stm32u5xx_ll_gpio.c/h</p>
<p > </p>
<p >使用HAL库工程中需要定义宏</p>
<p >USE_HAL_DRIVER</p>
<p >使用LL库工程中需要定义宏</p>
<p >USE_FULL_LL_DRIVER</p>
<p > </p>
<p >stm32u5xx_hal_conf.h中</p>
<p >#define HAL_GPIO_MODULE_ENABLED宏定义则会包含</p>
<p >对应头文件</p>
<p >#ifdef HAL_GPIO_MODULE_ENABLED</p>
<p >#include "stm32u5xx_hal_gpio.h"</p>
<p >#endif /* HAL_GPIO_MODULE_ENABLED */</p>
<p >stm32u5xx_hal_gpio.c的代码才会编译</p>
<p > </p>
<p >HAL库只需要包含总的头文件#include "stm32u575xx.h"即可;</p>
<p >LL库需要包含对应的模块头文件#include "stm32u5xx_ll_gpio.h"。</p>
<h2 ><b>GPIO操作</b></h2>
<p >这里使用LL库。</p>
<p >先要使能对应的时钟要包含头文件#include "stm32u5xx_ll_bus.h"</p>
<p >LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);</p>
<p > </p>
<p >我们从对应的头文件即可看到操作接口比如LL库的</p>
<div class="parsedown-markdown">
<p>ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx);</p>
<p >ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct);</p>
<p >void LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);</p>
</div>
<p > </p>
<p >总的代码如下</p>
<div class="parsedown-markdown">
<p>#include "stm32u575xx.h"</p>
<p >#include "stm32u5xx_ll_gpio.h"</p>
<p >#include "stm32u5xx_ll_bus.h"</p>
<p > </p>
<p >void delay(uint32_t t)</p>
<p >{</p>
<p >volatile uint32_t timeout = t;</p>
<p >while(t--);</p>
<p >}</p>
<p > </p>
<p >int main(void)</p>
<p >{</p>
<p >LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);</p>
<p > </p>
<p >LL_GPIO_InitTypeDef GPIO_InitStruct;</p>
<p >//LL_GPIO_StructInit(&GPIO_InitStruct);</p>
<p >GPIO_InitStruct.Pin = LL_GPIO_PIN_7;</p>
<p >GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;</p>
<p >GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;</p>
<p >GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;</p>
<p >GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;</p>
<p >GPIO_InitStruct.Alternate = LL_GPIO_AF_0;</p>
<p >LL_GPIO_Init(GPIOB, &GPIO_InitStruct);</p>
<p >while(1)</p>
<p >{</p>
<p >delay(1000000ul);</p>
<p >LL_GPIO_TogglePin(GPIOB, 1u<<7);</p>
<p >}</p>
<p >}</p>
</div>
<p > </p>
<p >仿真下载,云心可以看到蓝色LED开始闪烁,可以查看GPIO对应的寄存器</p>
<p > </p>
<h1 ><b>总结</b></h1>
<p >得益于完善的库,操作外设非常简单高效,这一点STM是做的非常好的。需要注意的是使用外设一定要先使能对应的外设时钟。</p>
我怎么点不亮PG2这个灯。需要特殊的配置吗? lugl4313820 发表于 2022-12-14 22:28
我怎么点不亮PG2这个灯。需要特殊的配置吗?
<p>他这里只点了pb7</p>
damiaa 发表于 2022-12-15 10:04
他这里只点了pb7
<p>恩恩。</p>
lugl4313820 发表于 2022-12-14 22:28
我怎么点不亮PG2这个灯。需要特殊的配置吗?
<p><a href="https://bbs.eeworld.com.cn/thread-1228637-1-1.html">【ST NUCLEO-U575ZI-Q 测评 】PGIOG端口点灯问题 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn)</a></p>
<p>需要配置VDDIO2</p>
damiaa 发表于 2022-12-15 10:04
他这里只点了pb7
<p>参见</p>
<p><a href="https://bbs.eeworld.com.cn/thread-1228637-1-1.html">【ST NUCLEO-U575ZI-Q 测评 】PGIOG端口点灯问题 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn)</a></p>
<p> </p>
<p>谢谢,学习了</p>
<p>永远的点灯问题,我发现改例程移植FreeRTOS个小程序都搞得够呛</p>
<p>最后发现还是CubeMX里面GPIO MODE和PULLUP,PULLDOWN没配置好<img height="50" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/funk1.gif" width="53" /></p>
<p>最近在学习,教程很不错,可以说很用心了</p><br/> <p>测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html</p>
页:
[1]