hello,小伙伴们,大家好,这里是左左右,在前面的第8期视频中,我们用STM32CubeIDE通过对I O口的简单配置,和几行简单的代码,实现了按钮控制L E D灯亮灭的一个小案例,这期视频我们就使用Clion来实现相同的功能,与STM32CubeIDE开发的不同之处在于,我们要用自己写代码来配置I O口,通过原理图不难发现,按钮一端与PC13相连,另一端接地接地,当按钮被按下时,PC 13对应 I D R寄存器被置0,当按钮抬起时,PC13引脚受外部干扰,输入电平不确定,这时我们要将 PC 13引脚设置为上拉输入模式,提供一个相反的电平信号,接着我们就通过可以读取 PC 13对应 I D R寄存器中的值来判断,按钮是抬起还是按下状态,接着来看原理图,LED1一端与PA 15相连接,另一端接3.3V,当我们把PA 15对应 O D R寄存器被置0时,PA15向外输出0V的低电平,小灯两端形成电压差,小灯被点亮,当我们把PA 15对应ODR寄存器被置1时,PA 15向外输出3.3V的高电平,小灯两端无电压差,小灯熄灭,这时我们通过判断 PC 13对应 I D R寄存器中值的变化,来操作PA15对应 ODR寄存器中的值,就实现了按键控制小灯亮灭的功能了,好多小伙伴们会问,为什么这里是PC 13和 PA 15这两个引脚,其他引脚不可以吗?
这是因为我们的电路板就是这样设计的,在设计电路板前要先绘制原理图,规划s t m 3 2芯片各个引脚要与什么样的元器件连接,实现什么样的功能,接下来才是绘制电路板,当电路板生产完成后,原理图就成了这块电路板的说明书了,因为直接看电路板是看不出来具体引脚的连接方式的。
接着打开我们上期视频建好的CLion项目,将它复制一份出来,打开项目文件删掉文件名为.idea的文件夹,这个文件夹包含了旧项目的所有CLion专属配置,在新项目中使用会导致冲突。紧接着打开Clion,点击新建项目,位置这里输入我们刚才的路径,点击继续,接着将之前写好的代码全部删掉,这时这个项目就是个模板项目了,同样我们打开这个模板项目的所在位置,删除.idea的文件夹,之后每次我们在创建新项目时,把它复制一份出来就可以了,接着打开复制好的项目,首先采用寄存器的写法来实现按键控制 L E D小灯亮灭的案例,这里为了方便大家的理解,我就直接就用二进制数了,首先将 PC 13引脚设置为上拉输入模式,这里我们定义指针指向 GPIOC_IDR寄存器地址,这是因为待会我们要读取这个寄存器中值来判断按键是否被按下,接着将PA15设置为推挽输出模式,然后在whlie循环中判断按键是否被按下,当 PC13对应 IDR寄存器值为0时,说明按键被按下了,由于按键刚被按下时,会有发生抖动,这时我们加一个10毫秒的延时将这段抖动延时过去,接着继续判断按键状态如果被按下,就翻转 PA15电平信号,也就是翻转PA15对应ODR寄存器中的值,这里我们要增加一个新的知识点,前面我们讲过位的“或”运算和“与”运算,这里我们讲一个新的位运算符,那就是位的“异或”运算,符号是这样,也很简单,两个值相同就为零,不相同为1,当 PA15对应 ODR中对应值为1时,与这个值做异或运算,结果为0,当 PA15对应 ODR中对应值为0时,与这个值做“异或”运算,结果为1,而且对其他位没有任何影响,是不是很巧妙的实现了电平翻转效果,接着等待按键被抬起,就跳出while循环,虽然我们在按下按键到抬起按键的时间很短暂,但程序的执行速度远大于这个时间,所以这里加个while循环做等待,最后就是用Hell库实现相同的功能,这个就很简单了。




最后强调一点我手写的代码大家一定要自己手动写一遍,而且自己写的过程肯定会出问题,有问题解决问题才能真正掌握对应的知识点,,好的,今天的视频就到这里,如果觉得有收获,一定要关注、点赞、收藏,评论,你的支持是我这样的小博主持续更新下去的最大动力,期待下期视频再见!