野火STM32学习笔记

野火STM32学习笔记

网的广大观众朋友们大家好,本up猪在C站(CSDN俗称粪坑)的ID叫飞天大司马,鉴于C站虽然阅读量大,但是本人反馈无法及时,因此在B站同步更新创作内容,欢迎各位新老粉丝前来批评指正一起学习。

今天的主题是编写一个GPIO端口的置位和复位程序,GPIO在完成了一个工作之后要把它恢复到工作之前的状态(拉低为0)叫做复位或者(拉高为1)置位。

头文件和C文件的创建

编写这个函数,我们首先建立一个叫“stm32f10x_gpio.c”的C文件,和一个“stm32f10x_gpio.h”C语言头文件。如图
用记事本生成改一下文件形式即可

导入工程列表

再回到工程界面,双击Source Group 1文件夹添加“stm32f10x_gpio.c”随后要将头文件导入进来,头文件导入方法我会单独出一个小专栏让大家了解一下。导入成功文件目录会出现下面的界面,如图。

在这里插入图片描述

头文件编写

接下来我们开始编写函数的头文件,在STM32当中每一个头文件的框架都是这样的,如图
在这里插入图片描述
#ifndef空格两个双下划线头文件大写把所有点改成下划线

#define空格两个双下划线头文件大写把所有点改成下划线

头文件程序

#endif
至于为什么要这么写,本up猪才疏学浅,不知道深层次的原因,只能从字面意思上翻译:如果没有定义此头文件,我就定义这个头文件······结束,作用是为了避免头文件里的的内容被重新定义。如果有了解更具体的同学,大牛,欢迎在评论区留言。不明白也没有关系,只要知道是这样用就行了。

我们在编写置位复位函数的时候,还是要用到之前的寄存器定义函数的头文件的,因为置位复位本质上也是对寄存器操作要用到“stm32f10x.h”里的寄存器定义,所以要把“stm32f10x.h”这个头文件包含进来。
在这里插入图片描述

进入函数的C文件

头文件配置完成,我们要进入C文件开始写程序了,程序开头同样要导入stm32f10x.h。如图
在这里插入图片描述
此时我如果按下编译键,会出现一个问题,error:#256 invalid redeclaration of type name “ ···”。这就是因为在上节课的头文件stm32f10x.h开头和结尾没有写那样的框架“#ifndef·········#endif”,导致的头文件重定义错误。什么是头文件重定义错误,这个是C语言的知识,可以在其他资料里面查找,这里不再赘述,改正方法如下图
在这里插入图片描述
在这里插入图片描述
前面的都是准备工作,到这里我们才开始正式编写函数。首先,定义这个函数的名字,给他取名GPIO_SetBits,这个函数有两个形式参数,为什么呢?
设置两个形式参数

我来举个栗子,就比如我要操作PB0这个端口,那我要告诉别人操作GPIOB这个寄存器,而且是GPIOB的Pin0。因此函数内的第一个形式参数是GPIO_TypeDef * GPIOx这样一个指针,当这个x为B时,就对应GPIOB这个寄存器的地址。第二个参数针对的是IO口,每个GPIO端口有16个IO,因此这个参数可以设定为uint16_t GPIO_Pin。将来这个参数怎么传,下面会告诉大家先不要急。

置位的时候我们就不操作端口ODR寄存器了,而是操作BSSR端口置位清除寄存器,而且我们只用他的低16位,我把技术手册关于这个寄存器的功能截下来如图
注意看低16位是置位功能
因此我在这个函数里面操作BSSR寄存器输入GPIOx->就会出现如下图所示的界面,
在这里插入图片描述
我们可以选择要用的寄存器,那么光标移动到BSSR上点击回车都可以选择。由于BSSR寄存器都是置1有效,因此我们要对寄存器的某一位置1,如果直接用二进制或者16进制位进行|=运算的话,程序会显得过于冗杂,于是ST公司给每一个IO口做了一个宏定义。代码如下图,看起来很可怕,其实原理很简单,就是把每一位置1的情况用宏定义包装起来,看右侧的绿色注释就不难发现,而且对后面的操作寄存器位非常有帮助。。
GPIO端口的每一位的寄存器宏定义
还有一个细节要注意一下,一会我们要进入主函数测试刚才写的程序,我们要把这个程序在头文件里定义一下,才能被主函数方便调用。
在这里插入图片描述

主函数的操作(测试)

现在看回主函数这两行代码我们把它们删掉,如图
在这里插入图片描述
改用我们刚写的函数,第一个参数改成GPIOB,第二个参数改成GPIO_Pin_0如图所示,
在这里插入图片描述
由于ODR寄存器默认置0,所以在执行GPIO_SetBits之前的代码操作下灯是亮着的,将它置位之后,我们可以看到灯灭了。

同理可得,复位的函数,也是两个参数,只不过作用是置0的。大家依葫芦画瓢看看能不能写出来,发在评论区。我会精选正确答案。

大家可以去B站关注我的专栏,我的ID叫“是晃晃叔叔”,因为B站回复比较及时,欢迎大家一起学习进步。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞天大司马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值