打印
[其他ST产品]

两段代码的区别是什么

[复制链接]
1465|63
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
第一种方法是直接操作寄存器,第二种是用库函数封装的方式,效果上类似,但写法和可读性不同。

使用特权

评论回复
5
周半梅| | 2025-3-5 07:46 | 只看该作者
直接操作寄存器的方式运行更快,但可读性差,维护起来比较麻烦,尤其是后期改动时。

使用特权

评论回复
6
帛灿灿| | 2025-3-5 07:47 | 只看该作者
GPIOB->CRH 这种方式需要手动计算寄存器值,不小心可能会影响到其他 GPIO 引脚。

使用特权

评论回复
7
童雨竹| | 2025-3-5 07:48 | 只看该作者
用 GPIO_Init() 这种库函数的方式更直观,ST 官方的 HAL 库也是基于这个思路。

使用特权

评论回复
8
万图| | 2025-3-5 07:49 | 只看该作者
如果是性能要求极高的场合,寄存器操作会更快,因为少了一层函数调用的开销。

使用特权

评论回复
9
Wordsworth| | 2025-3-5 07:51 | 只看该作者
GPIO_Mode_IPU 这个模式是上拉输入模式,直接操作寄存器时,相应的位配置成 0b1000 也就是 0x8。

使用特权

评论回复
10
Bblythe| | 2025-3-5 07:52 | 只看该作者
第一种方法是 “暴力改寄存器”,第二种方法更结构化,适合配合其他 HAL 库一起使用。

使用特权

评论回复
11
Pulitzer| | 2025-3-5 07:53 | 只看该作者
如果后续要移植到别的 STM32 平台,使用库函数的方式更便于移植,直接改寄存器可能需要重新计算配置值。

使用特权

评论回复
12
Uriah| | 2025-3-5 07:54 | 只看该作者
第一种方法直接覆盖了 GPIOB->CRH 高 16 位的配置,而库函数的方法只改动选定的引脚,更安全一些。

使用特权

评论回复
13
Clyde011| | 2025-3-5 07:55 | 只看该作者
你更倾向于哪种方式?如果是新手,推荐用库函数,熟练后可以尝试直接操作寄存器优化性能。

使用特权

评论回复
14
sdlls| | 2025-3-9 19:10 | 只看该作者
在 STM32 中,每个 GPIO 端口都有两个控制寄存器,即CRL(低 8 位引脚控制寄存器)和CRH(高 8 位引脚控制寄存器)。通过对这些寄存器的位操作,可以精确地配置每个引脚的工作模式和速度。

使用特权

评论回复
15
wwppd| | 2025-3-9 19:41 | 只看该作者
直接操作寄存器,无需函数调用,代码效率高。

使用特权

评论回复
16
yeates333| | 2025-3-9 20:25 | 只看该作者
第二段代码更为推荐,因为它更符合现代嵌入式编程的最佳实践,提高了代码的可读性和可维护性。

使用特权

评论回复
17
maqianqu| | 2025-3-9 21:17 | 只看该作者
使用STM32标准外设库(如stm32f10x_gpio.h)提供的函数,通过结构体配置GPIO。

使用特权

评论回复
18
saservice| | 2025-3-9 22:10 | 只看该作者
对开发者的要求较高,需要对 STM32 的寄存器结构和功能有深入的了解,并且代码的可读性和可维护性相对较差,尤其是在复杂的配置场景下。

使用特权

评论回复
19
janewood| | 2025-3-10 10:42 | 只看该作者
第一段代码直接操作寄存器,第二段代码使用库函数。

使用特权

评论回复
20
fengm| | 2025-3-10 13:50 | 只看该作者
直接寄存器操作提供了更高的灵活性和控制粒度,但增加了代码的复杂性和出错风险。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

471

主题

2695

帖子

2

粉丝