点灯案例优化(三)宏定义特定位名称

前面利用位运算对代码进行二次优化以后,确实可读性更好,精确性更高了。但是吧,你乍一看这个代码

你可能一下都反应不过来这些的啥意思了,表达式右边上来就是一顿运算,可能刚开始大多数人都看不懂这写的什么,因此在这块我们还可以再次优化一下。如同一次优化那块,我们利用宏定义让寄存器地址的查找更加清楚,可读性更高了,那么寄存器中数据特定位是不是也有宏定义呢?

确实是有的,同样也在之前的那个stm32f10x.h头文件中。然后宏定义的就是我们这些要自己根据技术手册来确定的数值。大家可以自行在头文件中使用ctrl+F用查找功能去查看,操作方式与一次优化时我们探索宏定义文件方法类似。点击代码优化(一)宏定义寄存器名称可以直接进入。

下面我们直接利用代码联想功能直接试试看

那么我们继续输入我们这个寄存器名称,发现下面出现IOPAEN等,实际上这就是对应该寄存器控制的GPIO时钟的特定位了。

我们直接替换

 接着,我们继续替换其他表达式

 这里,因为GPIO端口配置寄存器中每一个端口的数据位都是类似的,所以在定义特定位的宏时直接用GPIO打头了

其次,这里CNF0表示了它里面的两个位,其中也可以利用CNF0_0 _1去单独修改这两位

这里,我们看一下手册,避免不记得了

由此就可以看见, CNFx和MODEx构成的(x=0,1,...,),其中x就表示了端口位PA0,1...,且一个包括两个特定位,我们修改的就是这两部分。

由于我们点亮第一个灯是让CNF0变成00,MODE0变成11,所以我们继续替换修改代码

然后就是设置端口高低电平的部分

同理去修改

 在这里,我们看见显示出了很多端口对应的特定位的宏定义,最后的数字0,1...就是代表PA0等,所以我们直接选择PA0,即ODR0

 修改完了,现在展示一下完整代码

 现在,我们测试一下,看有没有问题

很明显,没有错误

现在直接运行,然后下载程序,很明显,可以运行成功,灯亮了

利用宏定义,将我们进行位运算要用的值利用特定位对应的宏进行替换即可,其他运算符都不用做改变。

根据这个原理,我们也可以顺势将其他灯也点亮,代码也简洁了不少,可读性也提高了。这也是我们今后写代码最常用的格式,到目前为止,我们才算刚刚入门

最后,经过这三次代码的优化,我们逐渐掌握了stm32开发的代码编写风格,认识到了一些寄存器并进行了几次技术手册的翻阅,王后将继续深入学习GPIO相关知识。加油 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值