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时钟,并提供延迟以使时钟在进一步操作之前稳定下来。

相关推荐

  1. 127.0.0.1和0.0.0.0的区别

    2023-12-19 12:20:03       33 阅读
  2. IP地址 0.0.0.0 和 127.0.0.1之间的区别

    2023-12-19 12:20:03       15 阅读
  3. vue3.0&&vue2.0-prop

    2023-12-19 12:20:03       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-19 12:20:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-19 12:20:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-19 12:20:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-19 12:20:03       20 阅读

热门阅读

  1. 数据结构-顺序表的大小

    2023-12-19 12:20:03       39 阅读
  2. jquery、vue、uni-app、小程序的页面传参方式

    2023-12-19 12:20:03       31 阅读
  3. ubuntu18.04 升级到ubuntu22.04版本

    2023-12-19 12:20:03       59 阅读
  4. 如何在断线后不重连加入音视频房间

    2023-12-19 12:20:03       48 阅读
  5. 四舍五入专题

    2023-12-19 12:20:03       27 阅读
  6. ubuntu16.04升级到ubuntu18.04

    2023-12-19 12:20:03       38 阅读
  7. 【大数据面试】MapReduce常见问题与答案

    2023-12-19 12:20:03       47 阅读
  8. ❤Mac上后端环境工具安装使用

    2023-12-19 12:20:03       40 阅读