qinyunti 发表于 2022-12-14 17:48

【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 > &nbsp;</p>

<h2 ><b>HAL/LL库</b></h2>

<p >stm32u5xx_hal_gpio.c/h</p>

<p >stm32u5xx_ll_gpio.c/h</p>

<p >&nbsp;</p>

<p >使用HAL库工程中需要定义宏</p>

<p >USE_HAL_DRIVER</p>

<p >使用LL库工程中需要定义宏</p>

<p >USE_FULL_LL_DRIVER</p>

<p >&nbsp;</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 &quot;stm32u5xx_hal_gpio.h&quot;</p>

<p >#endif /* HAL_GPIO_MODULE_ENABLED */</p>

<p >stm32u5xx_hal_gpio.c的代码才会编译</p>

<p >&nbsp;</p>

<p >HAL库只需要包含总的头文件#include &quot;stm32u575xx.h&quot;即可;</p>

<p >LL库需要包含对应的模块头文件#include &quot;stm32u5xx_ll_gpio.h&quot;。</p>

<h2 ><b>GPIO操作</b></h2>

<p >这里使用LL库。</p>

<p >先要使能对应的时钟要包含头文件#include &quot;stm32u5xx_ll_bus.h&quot;</p>

<p >LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);</p>

<p >&nbsp;</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 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);</p>
</div>

<p >&nbsp;</p>

<p >总的代码如下</p>

<div class="parsedown-markdown">
<p>#include &quot;stm32u575xx.h&quot;</p>

<p >#include &quot;stm32u5xx_ll_gpio.h&quot;</p>

<p >#include &quot;stm32u5xx_ll_bus.h&quot;</p>

<p >&nbsp;</p>

<p >void delay(uint32_t t)</p>

<p >{</p>

<p >volatile uint32_t timeout = t;</p>

<p >while(t--);</p>

<p >}</p>

<p >&nbsp;</p>

<p >int main(void)</p>

<p >{</p>

<p >LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);</p>

<p >&nbsp;</p>

<p >LL_GPIO_InitTypeDef GPIO_InitStruct;</p>

<p >//LL_GPIO_StructInit(&amp;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, &amp;GPIO_InitStruct);</p>

<p >while(1)</p>

<p >{</p>

<p >delay(1000000ul);</p>

<p >LL_GPIO_TogglePin(GPIOB, 1u&lt;&lt;7);</p>

<p >}</p>

<p >}</p>
</div>

<p >&nbsp;</p>

<p >仿真下载,云心可以看到蓝色LED开始闪烁,可以查看GPIO对应的寄存器</p>

<p > &nbsp;</p>

<h1 ><b>总结</b></h1>

<p >得益于完善的库,操作外设非常简单高效,这一点STM是做的非常好的。需要注意的是使用外设一定要先使能对应的外设时钟。</p>

lugl4313820 发表于 2022-12-14 22:28

我怎么点不亮PG2这个灯。需要特殊的配置吗?

damiaa 发表于 2022-12-15 10:04

lugl4313820 发表于 2022-12-14 22:28
我怎么点不亮PG2这个灯。需要特殊的配置吗?

<p>他这里只点了pb7</p>

lugl4313820 发表于 2022-12-15 12:43

damiaa 发表于 2022-12-15 10:04
他这里只点了pb7

<p>恩恩。</p>

qinyunti 发表于 2022-12-15 13:44

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>

qinyunti 发表于 2022-12-15 13:45

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>&nbsp;</p>

starcat123 发表于 2022-12-16 01:47

<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>

hhhhcccc 发表于 2022-12-24 16:57

<p>最近在学习,教程很不错,可以说很用心了</p><br/>

okhxyyo 发表于 2023-1-12 09:41

<p>测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html</p>
页: [1]
查看完整版本: 【ST NUCLEO-U575ZI-Q 测评 】HAL/LL库使用之GPIO-点灯