作业
一、学习CH04示例程序
1.示例GPIO-ASM-STM32L431-20231129
该示例是使用纯汇编点亮了蓝色的小灯
首先是初始化了外设模块
这时候去看看gpio_init初始化函数在干什么
进入gpio.s查看,根据它的说明:初始化指定端口引脚作为GPIO引脚功能,并定义为输入或输出。若是输出,还指定初始状态是低电平或高电平。
具体做法如下图
判断要设置输入状态还是输出状态
后面太多了就不截取了,总之最后引脚会有输入或输出,高电平还是低电平这几种状态,用两个数就可以表示
回到main
亮灯时进行的操作
灭灯时进行的操作
这样就可以亮起一个蓝色小灯了。
2.示例GPIO-BlueLight_20230328
第二个示例就比较简单,直接调用GPIO构件进行亮起蓝色小灯。
也就是它都帮你封装好了,你直接调用就OK了,像函数一样,简单易懂。
3.示例GPIO-Output-Component_STM32L431_20200928
第三个示例程序在第二个示例的基础上,加了一点逻辑,让蓝色小灯能够一亮一灭
其实就是循环改变灯状态的标志初始化小灯以及控制小灯亮灭还是调用GPIO构件
4.示例GPIO-Output-DirectAddress_STM32L431_20200928
该示例是通过直接修改寄存器的内容来控制小灯的亮灭以及颜色的,不使用GPIO构件
初始化小灯
改变灯的亮灭
为什么这样他就会亮或者灭呢,参考一下官方文档
*gpio_brr|=(1<<9);它是一个位操作,首先先把1左移9位,得到的就是0...1 0000 0000,然后又对寄存器的每一位进行或操作。最终得到的效果就是把寄存器的第九位置1.
gpio_brr寄存器第九位为1,就会亮起蓝色小灯。而gpio_bsrr寄存器第九位为1,就会熄灭蓝色小灯
二、给出 gpio set(LIGHT RED,LIGHT OFF); 语句中LIGHT RED和LIGHT OFF的值是多少?贴出每一步的查找截图。
先去找头文件,发现有提到构件
然后去找user.h,稍微翻下就找到了
红灯是7。灯亮是0,灯灭是1(这好像有点反常识,感觉应该反过来的;那么查了之后还是有用的)
三、用直接地址编程方式,实现红绿蓝三灯轮流闪烁
有了上面的学习,做这个还是挺轻松的
主要就是该循环这里,这里仅附上一部分
就是通过该寄存器的值控制小灯的亮灭,然后每次改的值不同
四、用调用构件方式,实现红绿蓝的八种组合轮流闪烁
这个也是大同小异,8种颜色其实就是三种小灯排列组合
这里8种颜色就不全部附上来了,之前截图也有。