do{ __HAL_RCC_GPIOH_CLK_ENABLE(); }while(0);
2023-12-19 01:37:16
- 使用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时钟,并提供延迟以使时钟在进一步操作之前稳定下来。
文章来源:https://blog.csdn.net/m0_61712829/article/details/135073618
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!