do{ __HAL_RCC_GPIOH_CLK_ENABLE(); }while(0);

2023-12-19 00:45
文章标签 hal clk enable rcc gpioh

本文主要是介绍do{ __HAL_RCC_GPIOH_CLK_ENABLE(); }while(0);,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 使用STM32 HAL库,专门用于在STM32微控制器上启用GPIOH (GPIO端口H)时钟。
  • 在此代码片段中,宏__HAL_RCC_GPIOH_CLK_ENABLE()用于启用GPIOH的时钟。do-while(0)结构通常用作为宏定义创建单行代码块的技巧。
  • 以这种方式使用do-while(0)结构允许宏像函数调用一样使用,并在控制语句中具有适当的作用域。它确保宏可以安全地用于if-else语句、循环和复合语句中。
  • 总的来说,这个代码片段使用STM32 HAL库为GPIOH启用时钟。
​
#define __HAL_RCC_GPIOH_CLK_ENABLE()  do { \__IO uint32_t tmpreg = 0x00U; \SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOHEN); \/* Delay after an RCC peripheral clock enabling */ \tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOHEN); \UNUSED(tmpreg); \} while(0U)

以上代码片段是类函数宏__HAL_RCC_GPIOH_CLK_ENABLE()的宏定义。

宏扩展为do-while循环,使用STM32 HAL库启用STM32微控制器上的GPIOH时钟。

分解一下宏的定义,宏定义包括以下步骤:

  • 声明一个__IO uint32_t类型的临时变量tmpreg(一个I/O volatile uint32_t变量)。
  • 它使用SET_BIT宏在RCC_AHB1ENR寄存器(负责启用GPIOH上的时钟的寄存器)中设置相应的位。
  • 它执行延迟以确保外围时钟在继续之前是稳定的。它使用READ_BIT宏从RCC_AHB1ENR寄存器读取值,并将其赋值给tmpreg变量。
  • 它显式地将tmpreg变量标记为未使用,可能会在优化代码时避免编译器警告。
  • 它将整个代码块放在do-while循环中,该循环只执行一次(因为条件0U总是false),从而允许在控制结构中使用宏。
  • 总的来说,这个宏确保在STM32微控制器上启用GPIOH时钟,并提供延迟以使时钟在进一步操作之前稳定下来。

这篇关于do{ __HAL_RCC_GPIOH_CLK_ENABLE(); }while(0);的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/510363

相关文章

STM32CubeMX和HAL库-新建项目

目录 新建项目 选择开发板  MCU图形化配置界面总览 MCU配置 新建项目 新建项目包含选择MCU创建项目、选择开发板新建项目和交叉选择MCU新建项目三部分。 1. 选择MCU创建项目 单击主菜单项File→New Project,或Home视图上的ACCESS TO MCU SELECTOR 按钮,都可以打开的New Project from a MCU/MPU对话框。

STM32 HAL CAN通讯 实操

1、简介 相比于串口通讯,对于刚接触CAN通讯的小白来说,CAN通讯相对复杂,看各种视频、帖子理论,总是一知半解。本次通过傻瓜式操作,先实现CAN通讯的交互,以提高小白的信心,也便于自己复习观看。本次以STM32CubeMX进行初始化配置,通过Keil 5软件进行软件设计,通过CAN盒实现进行数据的交互。该流程实际以STM32F0、F1、F3、F4、F7实测好用(理论上都适用),这三种型号单片机

我在高职教STM32——准备HAL库工程模板(1)

新学期开学在即,又要给学生上 STM32 嵌入式课程了。这课上了多年了,一直用的都是标准库来开发,已经驾轻就熟了。人就是这样,有了自己熟悉的舒适圈,就很难做出改变,老师上课也是如此,排斥新课和不熟悉的内容。显然,STM32 的开发,HAL 库已是主流,自己其实也在使用,只不过更换库就意味着教学内容有很大变化,自己也就迟迟没有迈出调整这一步。现在,是时候做出变化了,笔者计划保持教学项

STM32单片机HAL库——ADC输入

一、单通道采集 二、单通道+DMA采集 使能DMA 三、定时器采集+DMA传输 选择定时器1的通道1作为触发源,在TIM1的上升沿进行采集 定时器1挂载在APB2上面,APB2上定时器的频率为168MHZ psc=168-1 arr=1000-1 TIM1的时钟频率为168/168/1000=1kHZ pulse设置为500,占空比为50%

基于STM32的RTOS--freertos的使用(HAL实现多任务)

一:STM32cubemx配置         1:工程建立                         (1)打开stm32cubemx  点击进入芯片选择页面                                         (2)选择对应的芯片型号双击         2:调试接口配置                  3:时钟设置

tiny4412 ov5640 driver and hal

初步完成在 tiny412 上 ov5640的driver and hal 的 porting  源码: https://github.com/gxx9203/tiny4412_ov5640_hal

STM32F1 HAL库笔记0

参考UM1850  Description of STM32F1 HAL and low-layer drivers 1、STM32Cube 包括:         • STM32CubeMX,图形软件配置工具,使用图形向导生成 C 初始化代码。         • 嵌入式软件平台,按系列提供(例如用于STM32F1的STM32CubeF1),包括:         ——STM32Cube

STM32的窗口看门狗详解及案例(基于HAL库)

目录 一、引言 二、窗口看门狗的工作原理 1.基本概念 2.功能描述 3.窗口值和计数器初始值 三、STM32F429 HAL 库中窗口看门狗的配置步骤 1.开启时钟 2.初始化窗口看门狗  3.开启早期唤醒中断 4.喂狗操作  四、窗口看门狗的应用场景  1.防止软件死锁 2.检测外部干扰 3.提高系统可靠性 五、注意事项 1.时间窗口的设置 2.喂狗操作的

【STM32+HAL库】---- 硬件IIC驱动0.96OLED

硬件开发板:STM32G0B1RET6软件平台:cubemax+keil+VScode 内容原著声明 代码借鉴学习于以下文章: STM32 使用硬件IIC驱动0.96寸4针IOLED显示器(HAL库) 1 新建cubemax工程 1.1 配置系统时钟RCC 1.2 配置引脚 1.3 导出工程 略… 2 代码 2.1 OLED_IIC_Config.h /*** **

关于std::shared_ptr和enable_share_from_this的一个隐蔽的问题

在使用共享指针时,遇到了一个如下问题: #include <iostream>class traversal;class observer {std::shared_ptr<traversal> m_tra;public:observer(std::shared_ptr<traversal> t):m_tra(t) {};~observer() { std::cout << "releas