打印
[其他ST产品]

两段代码的区别是什么

[复制链接]
楼主: classroom
手机看帖
扫描二维码
随时随地手机跟帖
41
houjiakai| | 2025-3-12 22:52 | 只看该作者 回帖奖励 |倒序浏览
对于不熟悉STM32寄存器布局的人来说,这种代码的可读性可能较低。

使用特权

评论回复
42
星闪动力| | 2025-3-13 21:07 | 只看该作者
使用STM32标准外设库时,可以通过结构体配置GPIO。

使用特权

评论回复
43
elsaflower| | 2025-3-14 11:41 | 只看该作者
GPIO_Pin 明确指定要配置的引脚(PB12-PB15)。
GPIO_Mode 设置为 GPIO_Mode_IPU(输入上拉)。

使用特权

评论回复
44
ccook11| | 2025-3-14 11:51 | 只看该作者
第二段代码使用STM32的标准库函数(HAL库或固件库)来配置GPIO。这种方式更高级,更安全,更容易理解和维护。

使用特权

评论回复
45
lzbf| | 2025-3-14 12:25 | 只看该作者
第一段代码可以精确控制每个位,适用于需要精细控制的场景。
第二段代码通过库函数封装,提供了更高的灵活性和易用性。

使用特权

评论回复
46
uiint| | 2025-3-14 12:53 | 只看该作者
使用库函数的代码通常更易于理解和维护。

使用特权

评论回复
47
hudi008| | 2025-3-14 14:27 | 只看该作者
GPIOB
->
CRH
&=

0X0000FFFF
;
         
// 清零CRH寄存器的高16位

GPIOB
->
CRH
|=

0X88880000
;
         
// 设置CRH寄存器的高16位为0x8888
实现方式:直接操作GPIOB的配置寄存器(CRH),通过位掩码和位操作修改寄存器值。

使用特权

评论回复
48
earlmax| | 2025-3-14 16:05 | 只看该作者
GPIOB->CRH &= 0X0000FFFF;:这是位清除操作,它将GPIOB端口配置寄存器的高半部分(CRH)的位16至31清零,保留位0至15的值不变。这样做的目的是为了清除之前可能设置的配置。
GPIOB->CRH |= 0X88880000;:这是位设置操作,它将GPIOB端口配置寄存器的高半部分的位24、26、28和30设置为1,对应于引脚12、13、14和15的模式配置。具体来说,每个引脚的模式被设置为“01”(在CNFy[1:0]和MODy[1:0]中),这表示这些引脚被配置为上拉/下拉输入模式,MODy[1:0]设置为“10”表示输入模式。

使用特权

评论回复
49
单芯多芯| | 2025-3-14 21:08 | 只看该作者
第二段代码更好,因为它按照现在嵌入式编程的好习惯来写的,让代码更容易懂,更容易修改。

使用特权

评论回复
50
updownq| | 2025-3-14 22:40 | 只看该作者
通过对GPIOB->CRH寄存器的操作,配置的是 GPIOB 端口的高 4 位引脚(即 PB12 - PB15)。

使用特权

评论回复
51
ccook11| | 2025-3-15 02:07 | 只看该作者
第一段代码直接操作寄存器,需要对寄存器结构非常熟悉,而且容易出错,尤其是位掩码的设置是否正确。

使用特权

评论回复
52
sdlls| | 2025-3-15 10:29 | 只看该作者
GPIOB->CRH&=0X0000FFFF;         
GPIOB->CRH|=0X88880000;
这里直接操作寄存器CRH。STM32的GPIO端口每个有高位寄存器CRH和低位寄存器CRL,控制16个引脚中的高8位(比如PB12-PB15)。CRH的每一位对应一个引脚的模式、输出类型、速度等配置。

使用特权

评论回复
53
sanfuzi| | 2025-3-15 11:46 | 只看该作者
使用了库函数和结构体,开发者不需要深入了解寄存器的具体操作,只需要按照库函数的接口说明进行配置即可。

使用特权

评论回复
54
ulystronglll| | 2025-3-15 12:21 | 只看该作者
GPIOB->CRH &= 0X0000FFFF;:这行代码将GPIOB端口的高配置寄存器(CRH)的高16位清零,保留低16位的值。这通常是为了准备对高16位进行新的配置。
GPIOB->CRH |= 0X88880000;:这行代码将GPIOB端口的高配置寄存器(CRH)的高16位设置为特定的值(每个四位一组,共四组,每组设置为8,即1000二进制)。在STM32的GPIO配置中,1000通常表示将引脚配置为输入上拉模式(具体取决于芯片型号和参考手册)。

使用特权

评论回复
55
macpherson| | 2025-3-15 12:42 | 只看该作者
直接操作寄存器,提供了非常高的灵活性和控制粒度,但也可能增加代码的复杂性和出错风险。

使用特权

评论回复
56
minzisc| | 2025-3-15 13:07 | 只看该作者
对不熟悉寄存器的开发者不友好,调试和维护难度较大。

使用特权

评论回复
57
mnynt121| | 2025-3-15 13:29 | 只看该作者
第一段代码直接操作寄存器,这种方式更接近硬件层面,通常用于需要优化性能或代码大小的情况。

使用特权

评论回复
58
mickit| | 2025-3-15 14:35 | 只看该作者
根据 STM32 的寄存器定义,0X8在CRH寄存器中对应的是输入上拉 / 下拉模式,这里配置为输入上拉模式的可能性较大,但具体还需要结合其他寄存器的设置。

使用特权

评论回复
59
modesty3jonah| | 2025-3-15 17:18 | 只看该作者
代码 1 是直接操作寄存器的方式,代码简洁但可读性和可维护性较差;代码 2 是使用库函数的方式,代码可读性和可维护性好,但执行速度相对较慢。

使用特权

评论回复
60
elsaflower| | 2025-3-15 18:14 | 只看该作者
两者都将 GPIOB 端口的 PB12 - PB15 引脚配置为上拉输入模式,但代码 2 的配置更加直观和明确。

使用特权

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

本版积分规则