用ST的HAL库后,被绕晕了,这样编程真的好吗?

2019-12-19 18:09发布

用的 STM32L053R8,其中设置CPU的内核电压这一个语句:
        __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
看到这个语句,先找 PWR_REGULATOR_VOLTAGE_SCALE1,如下:
        #define PWR_REGULATOR_VOLTAGE_SCALE1   PWR_CR_VOS_0
然后:
        #define PWR_CR_VOS_0               (0x1U << PWR_CR_VOS_Pos)                    /*!< 0x00000800 */
再然后:
        #define PWR_CR_VOS_Pos             (11U)   
,,,,,,
再找 __HAL_PWR_VOLTAGESCALING_CONFIG 的定义:
        #define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) (MODIFY_REG(PWR->CR, PWR_CR_VOS, (__REGULATOR__)))
然后:
        #define MODIFY_REG(REG, CLEARMASK, SETMASK)  WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
再然后:
        #define WRITE_REG(REG, VAL)   ((REG) = (VAL))
,,,,,,
等等,还没完,PWR_CR_VOS 是什么?再找:
        #define PWR_CR_VOS_Msk             (0x3U << PWR_CR_VOS_Pos)
        #define PWR_CR_VOS                 PWR_CR_VOS_Msk





以上所有的语句、定义,看了半天,其实加起来就为了实现将 PWR_CR 寄存器的11、12位写为 01 ,用语句表示如下:
        PWR->CR = (PWR->CR & (~0x00001800u)) | 0x00000800u;




呃,我不确定,这样真的“更简单”?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
94条回答
security
1楼-- · 2019-12-26 12:28
canspider 发表于 2017-9-5 10:43
补全也得要知道刚开始几个字母怎么拼的
你总不能让楼主26个字母挨个试一遍吧 ...


对于一个第三方库,肯定要知道个大概,才能开发。
总不能什么都不看,就开始写代码吧?盲目在那边敲吧?
对于合格的 SDK 而言,这些命名是要有规律的,遵循统一的前缀之类的。

就算是同一个团队内部,不同人员开发的,API 的命名,也是一样的道理,我们不会去记住全部,也不会去敲入全部,
记住模块前缀,以及开始几个字符,剩余靠自动补全。
security
2楼-- · 2019-12-26 13:15
4058665 发表于 2017-9-5 10:47
看代码确实很绕    用了一段时间  觉的最主要用途是与cubemx结合,HAL库提供了标准的api,这样才能标准化和 ...

至今我还没用过 STM32,没有真正去窥探一下 ST 的架构。
是个挺遗憾的事情。
li_thomas
3楼-- · 2019-12-26 19:02
本帖最后由 li_thomas 于 2017-9-5 10:58 编辑

ST有很多处理器,也有很多客户。它的出发点是可读性、兼容性和扩展性。对个人而言,相率优先。不同的出发点导致结果完全不一样
日日♂夜夜
4楼-- · 2019-12-27 00:39
 精彩回答 2  元偷偷看……
security
5楼-- · 2019-12-27 02:47
redroof 发表于 2017-9-5 09:28
懂不懂硬件无所谓,重要的是你看到这一行,它要做什么事情是清清楚楚的。谁也不会误解。
而往某某寄存器 ...

实际上,对于寄存器的直接操作,我一直使用以下形式,来避免出现 magic number,避免出错以及思考:

PWR->CR = (PWR->CR & ~(BIT_11 | BIT_12)) | BIT_11;                // 设置内核电压为1.8V

也就是我在 9 楼,给楼主的建议。
security
6楼-- · 2019-12-27 07:55
日日♂夜夜 发表于 2017-9-5 10:58
我倒觉得st为毛不搞一套C++封装库...
C++只要不用过分的模板写出来的比起C耦合好看好懂
很多地方也只要留出 ...

毕竟嵌入式的大哥,还是 C。
多数从业人员,对于 C++ 的掌握,恐怕还是有欠缺的。
在团队开发中,就要考虑队友的情况,现阶段,以及很长一段时间内,C 仍会是大哥,除非我们死光了

一周热门 更多>