OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3736|回复: 6

IO 口作为输出使用的方法;什么是#ifndef、#define、#enddif、使能、中断、宏定义?(第七天)

[复制链接]

20

主题

76

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1028
金钱
1028
注册时间
2019-5-27
在线时间
142 小时
发表于 2019-8-24 19:34:56 | 显示全部楼层 |阅读模式
本帖最后由 清夏 于 2019-8-30 21:02 编辑

      今天有人来找我帮他写基于STM32的红外寻迹程序,我叼叼的答应了,事后内心慌得一匹,看来要加紧学习了(滑稽,不再是别人都不搭理的渣渣啦!再就是今天学跑马灯实验,终于要写第一个程序了!!!)
      我来了我来了,我带着懵逼回来了。。。看完视频,原本以为啥都会的我傻了,又有好多新的问题又出来了(玛德我居然感到了兴奋。。。。),还有一个问题就是学这个东西,你既然学了,就不要嫌麻烦、嫌什么都不懂,更不要气急败坏以手捶墙。。。既然进了这个门,你就出不去了兄弟,还不如好好地心平气和地去一点一点搞定它(话说医院的wifi是真不错。。。)
      首先我们要搞清楚为什么学跑马灯实验?现在这个实验中我们要学会的是STM32 的 IO 口作为输出使用的方法,没有学会这个跑马灯写的再溜都没用。现在我仔细的说一下我学习跑马灯的过程和问题。
      我们拿过一个工程,里面有很多的文件,我们一定要搞懂每个文件的意义以及之间的关系。在跑马灯实验中,我们用main函数(用户代码)调动外设驱动代码(led.c和led.h文件,是利用固件库函数自己编写的,起到设备初始化的作用)和固件库驱动代码(就是FWLib文件里的固件库函数)来操作寄存器
      在这个工程中,我们一共自己写了三个文件:main.c、led.c、led.h。视频上虽然讲的很详细,但是主线不好抓(mmp劳资找了好久才找到主线。。),下面我们说说每个文件下面都写了什么
      led.h:宏定义了LED的初始化函数。
      led.c:这里面是LED初始化相关的代码。引用led.h文件和stm32f10x.h文件编写了LED初始化函数,里面包括①使能IO口的时钟(不同的IO组,调用的函数不一样);②初始化IO的模式(调用GPIOInit()函                数);③控制IO口输出高低电平(调用GPIO_SetBit()、GPIO_ ResetBit()函数)④引用了led.h文件里的LED初始化函数。
      main.c:引用stm32f10x.h文件、led.h文件和delay.h文件。调用了LED初始化函数和延时初始化函数和延时函数

      什么是使能?
      一开始我还以为是什么高大上的东西,查完之后就无语了。。。使能就是使之能(英文是enable),换句话说就是激活(比如使能引脚就是激活这个引脚,只有该引脚激活,芯片才能工作)

      什么是中断?
      中断就是中间断了,通俗来讲中断就是预定的某些事件将顺序执行的程序打断从而使服务程序得到执行的过程在一个程序正在执行的过程中被其他事件打断转而去执行别的程序,就叫中断)。而导致程序被打断的这个事件称为中断源。当碰到这样的问题时,计算机将会根据不同的中断事件去执行相应的程序,这些程序统称为中断服务程序中断服务程序是专门为中断设计的,在中断事件发生时执行的专用子程序,一般分为:保护现场、执行操作、恢复现场),执行完中断服务程序后,计算机会恢复到最初的程序接着运行。
       在用通俗的事情来解释一遍,就是你下了班,要开车回家去看父母(这就是原来的程序运行),正走在路上,突然接到一个电话说公司有重要的事情要你去办(这就是发生了中断,这个公司的事情就是中断源),你只好开车回公司(开车回公司做事就是运行中断服务程序)做完事之后再开车回去看父母(返回原程序继续运行),这就是一个中断发生的整个过程。

       什么是#ifndef、#define、enddif?
       ifdef(全称为if define)是如果没有定义,在最开头;define是定义;enddif是条件编译的结束标志,放在最后面(也就是说先#ifdine假设某个名词没有被定义,接着用#define定义这个名词,最后#endif结尾)。#ifndef、#define、enddif被称为条件编译,一般用在头文件中(应该是只能用在头文件中吧,有空再查查),可以避免头文件内容重复定义。条件编译还有更多的用途:https://blog.csdn.net/xieyihua1994/article/details/52699678

      什么是宏定义?
      宏定义又称为宏代换宏替换格式是:#define XXX YYY。宏定义的关键就是“换”(例如#define PI 3.14,就是将程序中所有的PI换成3.14;同理就是将XXX换成YYY)



























正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

76

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1028
金钱
1028
注册时间
2019-5-27
在线时间
142 小时
 楼主| 发表于 2019-8-29 19:34:20 | 显示全部楼层
Armind 发表于 2019-8-27 21:57
老哥,加油!我在你的贴子里学到了很多,我弄懂了函数库还有寄存器 !谢谢老哥。我会每天都看你的!

谢谢
回复 支持 1 反对 0

使用道具 举报

20

主题

76

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1028
金钱
1028
注册时间
2019-5-27
在线时间
142 小时
 楼主| 发表于 2019-8-24 19:35:48 | 显示全部楼层
话说条件编译是不是只能用在头文件里?
回复 支持 反对

使用道具 举报

3

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1088
金钱
1088
注册时间
2018-12-24
在线时间
113 小时
发表于 2019-8-27 14:34:05 | 显示全部楼层
清夏 发表于 2019-8-24 19:35
话说条件编译是不是只能用在头文件里?

不是吖,你c文件里也可以用吖。
回复 支持 反对

使用道具 举报

40

主题

259

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
459
金钱
459
注册时间
2016-5-19
在线时间
192 小时
发表于 2019-8-27 14:36:35 | 显示全部楼层
支持一波
回复 支持 反对

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2019-8-21
在线时间
65 小时
发表于 2019-8-27 21:57:48 | 显示全部楼层
老哥,加油!我在你的贴子里学到了很多,我弄懂了函数库还有寄存器 !谢谢老哥。我会每天都看你的!
回复 支持 反对

使用道具 举报

20

主题

76

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1028
金钱
1028
注册时间
2019-5-27
在线时间
142 小时
 楼主| 发表于 2019-8-29 19:34:43 | 显示全部楼层
小灰灰Veni 发表于 2019-8-27 14:34
不是吖,你c文件里也可以用吖。

ヾ(≧O≦)〃嗷~,我以后试一试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 18:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表