[其他ST产品] 两段代码的区别是什么

[复制链接]
 楼主| classroom 发表于 2025-2-28 11:26 | 显示全部楼层 |阅读模式
下面这两段代码的区别是什么?
1:
GPIOB->CRH&=0X0000FFFF;         
GPIOB->CRH|=0X88880000;
2:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;      
GPIO_Init(GPIOB, &GPIO_InitStructure);
yorkbarney 发表于 2025-3-4 19:49 | 显示全部楼层
这两段代码都与 STM32 的 GPIO(通用输入输出)配置相关
linfelix 发表于 2025-3-4 20:52 | 显示全部楼层
直接对 GPIO 端口的控制寄存器进行操作。
公羊子丹 发表于 2025-3-5 07:44 | 显示全部楼层
第一种方法是直接操作寄存器,第二种是用库函数封装的方式,效果上类似,但写法和可读性不同。
周半梅 发表于 2025-3-5 07:46 | 显示全部楼层
直接操作寄存器的方式运行更快,但可读性差,维护起来比较麻烦,尤其是后期改动时。
帛灿灿 发表于 2025-3-5 07:47 | 显示全部楼层
GPIOB->CRH 这种方式需要手动计算寄存器值,不小心可能会影响到其他 GPIO 引脚。
童雨竹 发表于 2025-3-5 07:48 | 显示全部楼层
用 GPIO_Init() 这种库函数的方式更直观,ST 官方的 HAL 库也是基于这个思路。
万图 发表于 2025-3-5 07:49 | 显示全部楼层
如果是性能要求极高的场合,寄存器操作会更快,因为少了一层函数调用的开销。
Wordsworth 发表于 2025-3-5 07:51 | 显示全部楼层
GPIO_Mode_IPU 这个模式是上拉输入模式,直接操作寄存器时,相应的位配置成 0b1000 也就是 0x8。
Bblythe 发表于 2025-3-5 07:52 | 显示全部楼层
第一种方法是 “暴力改寄存器”,第二种方法更结构化,适合配合其他 HAL 库一起使用。
Pulitzer 发表于 2025-3-5 07:53 | 显示全部楼层
如果后续要移植到别的 STM32 平台,使用库函数的方式更便于移植,直接改寄存器可能需要重新计算配置值。
Uriah 发表于 2025-3-5 07:54 | 显示全部楼层
第一种方法直接覆盖了 GPIOB->CRH 高 16 位的配置,而库函数的方法只改动选定的引脚,更安全一些。
Clyde011 发表于 2025-3-5 07:55 | 显示全部楼层
你更倾向于哪种方式?如果是新手,推荐用库函数,熟练后可以尝试直接操作寄存器优化性能。
sdlls 发表于 2025-3-9 19:10 | 显示全部楼层
在 STM32 中,每个 GPIO 端口都有两个控制寄存器,即CRL(低 8 位引脚控制寄存器)和CRH(高 8 位引脚控制寄存器)。通过对这些寄存器的位操作,可以精确地配置每个引脚的工作模式和速度。
wwppd 发表于 2025-3-9 19:41 | 显示全部楼层
直接操作寄存器,无需函数调用,代码效率高。
yeates333 发表于 2025-3-9 20:25 | 显示全部楼层
第二段代码更为推荐,因为它更符合现代嵌入式编程的最佳实践,提高了代码的可读性和可维护性。
maqianqu 发表于 2025-3-9 21:17 | 显示全部楼层
使用STM32标准外设库(如stm32f10x_gpio.h)提供的函数,通过结构体配置GPIO。
saservice 发表于 2025-3-9 22:10 | 显示全部楼层
对开发者的要求较高,需要对 STM32 的寄存器结构和功能有深入的了解,并且代码的可读性和可维护性相对较差,尤其是在复杂的配置场景下。
janewood 发表于 2025-3-10 10:42 | 显示全部楼层
第一段代码直接操作寄存器,第二段代码使用库函数。
fengm 发表于 2025-3-10 13:50 | 显示全部楼层
直接寄存器操作提供了更高的灵活性和控制粒度,但增加了代码的复杂性和出错风险。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

526

主题

3258

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

526

主题

3258

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部