本篇文章通过一个简单的例子来熟悉模块化编程以及利用库函数的方法进行开发使用STM32外设的基本流程。

  首先,我们打开本讲的例程,在工程目录我们可以看到驱动分组下有 led、delay 两个.c源文件,其实,它们对应的还有两个头文件,它们就保存在我们的 DRIVER 文件夹下的 inc 文件夹中,同理,源文件就保存在 src 文件夹中。

  我们在源文件里定义相关的函数,然后在对应的头文件里声明它,最后我们在想要调用此函数的源文件中包含该头文件即可,这就是模块化编程。这样做的好处就是代码整体框架结构清晰明了,便于我们进行后期维护与移植。

  因此,这个知识点希望大家能够掌握。

  下面我们就开始具体讲解如何驱动我们实验平台上的用户指示灯。首先,我们要明白,点灯它的本质是通过控制GPIO引脚这个基础外设输出高低电平,从而达到灯亮灭的效果,那么大家可能就要问了,之前说过,可以配置使用的通用 GPIO 引脚有37个,这么多GPIO口,我们该使用哪个呢?

  通过观察下图,我们可以发现,用户灯的一端是与主控芯片的 PC13 这个引脚电气相连的,因此我们就是要配置这个管脚输出高低电平,那么究竟是那种电平会使灯变亮呢?这时就要看我们的驱动电路了,其实也很简单,用户灯其实就是个发光二极管 ,既然是二极管,那么它就具有单向导电性 ,它的正极 接了3.3V电压,我们需要点亮它就需要在负极输出低电平,也就是 PC13 这个引脚得输出低电平。

  

  同理,灯灭就得输出高电平。

  接下来,我们回到工程中通过实例来了解 STM32基础外设使用的基本流程,首先我们用到了 GPIO 这个外设。因此,在工程中我们要添加 GPIO 这个外设的库函数,添加的方法这里再给大家演示一下。添加它是为了用于后面的初始化调用,接着新建两个文件,一个是用户灯源文件,一个是对应的头文件,分别命名为 led.c、led.h,保存在驱动文件夹下的src、inc 文件夹中,同时不要忘了将 led.c源文件添加到工程中来,接下来,就可以在 led.c中编写相关驱动函数了。

  在今天的实验中,所需编写的函数比较简单,就一个初始化函数,首先,我们定义一个 函数名,这个不能和库函数的函数名一样,否则会报错,这里取这个名字就可以,接着看函数主体,首先得定义一个GPIO的结构体变量,用于初始化结构体成员,(这个可以直接在 GPIO_Init 库函数里复制),接着很重要的一点就是我们要开启 GPIOC 这个口的时钟,否则它是不会工作的,开启它的时钟,我们直接调用库函数里的 RCC_APB2PeriphClockCmd 这个函数即可,接下来就是初始化 GPIO 的成员变量了,引脚选择 GPIO_Pin_13 这个引脚,模式选择 推挽输出模式,速度选择 50MHz 就可以了,最后 完成 GPIO_Init函数的初始化就可以了。接下来,我们一上电为了不让灯亮,就调用了 GPIO_SetBits 这个函数就可以了。然后不要忘了在 led.h中声明这个函数。

  为了使用户灯达到闪烁的效果,就需要加入延时,于是利用相同的方法新建delay.c、delay.h 两个文件,不要忘了也必须加入到工程中来,然后再delay.c中编写一个简单的计数延时函数就可以了,同理也需要将它声明在 delay.h中。

  最后,在主函数中,我们先调用 LED的初始化函数,然后在 while(1) 死循环中调用 GPIO_ResetBits 这个函数点亮 led,在调用自己编写的延时函数,然后在调用输出高电平这个函数,在加延时,这样就实现了一个循环闪烁的 用户灯。

  接下来,我们看一下 elink32 仿真器与实验板的连接图。

  

  最后,点击编译 ,无误后下载到我们的实验平台上,观察效果。更改延时值的大小就可以改变它的闪烁频率。

视频学习资料

C语言控制led灯
http://www.makeru.com.cn/live/1392_304.html?s=45051

概念这么多,我该如何学
http://www.makeru.com.cn/live/4034_1461.html?s=45051
如何做好精准职业规划
http://www.makeru.com.cn/live/4006_1429.html?s=45051
释放潜能:学习效率提升、编程能力提升
http://www.makeru.com.cn/live/3507_1276.html?s=45051

( ADC读取光照传感器)
http://www.makeru.com.cn/live/1392_1004.html?s=45051
通信协议 - UART串口协议
http://www.makeru.com.cn/live/3576_1437.html?s=45051
stm32之SPI通信
http://www.makeru.com.cn/live/3523_1795.html?s=45051

学习交流资料下载群:830802928

单片机零基础学习之从“点灯”入门STM32的更多相关文章

  1. python 零基础学习之路 02-python入门

    不知不觉学习python已经两个月了,从一开始不知道如何对print的格式化,到现在可以手撸orm,这期间真的是 一个神奇的过程.为了巩固自己的基础知识,为后面的拓展埋下更好的伏笔,此文当以导师的博客 ...

  2. 跟我从零基础学习Unity3D开发--NGUI入门基础

    英雄联盟(撸啊撸) QQ飞车 魔兽世界等等相信大家都玩过游戏吧,玩过那UI知道是什么吧?UI可能说得有点专业的话那么游戏中那些属性面板例如: 现在对UI有一定认识了吧!回想一下您玩过的游戏就一定知道什 ...

  3. 狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(2)

    前文链接:狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(1) 小甲鱼在很多情况下是跟着谭浩强鹦鹉学舌,所以谭浩强书中的很多错误他又重复了一次.这样,加上他自己的错误,错谬之处难以胜数. 由于拙 ...

  4. 零基础学习hadoop到上手工作线路指导

    零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...

  5. MongoDB实战开发 【零基础学习,附完整Asp.net示例】

    MongoDB实战开发 [零基础学习,附完整Asp.net示例] 阅读目录 开始 下载MongoDB,并启动它 在C#使用MongoDB 重构(简化)代码 使用MongoDB的客户端查看数据 使用Mo ...

  6. 零基础学习Hadoop

    零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...

  7. 零基础学习hadoop到上手工作线路指导(编程篇)

    问题导读: 1.hadoop编程需要哪些基础? 2.hadoop编程需要注意哪些问题? 3.如何创建mapreduce程序及其包含几部分? 4.如何远程连接eclipse,可能会遇到什么问题? 5.如 ...

  8. 零基础学习hadoop到上手工作线路指导(中级篇)

    此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结. 五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解: hadoop分为h ...

  9. 零基础学习hadoop到上手工作线路指导(初级篇)

    零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...

随机推荐

  1. ORACLE 12C Identity Column(身份列) 实现自增长字段

    Oracle 12c提供的Identity Column特性简化了自增字段的定义. 声明自增字段通常有3种常见的用法,以下三种方式都支持INSERT语句中省略自增字段的插入,但有些许差别. 1. GE ...

  2. linux停止nginx服务 未成功

    在上线新功能的时候,需要将服务器停掉,防止在更新过程中有用户进行操作额外的数据. 1:查看nginx主进程: ps -ef | grep nginx 这里root 后面的数字表示:主进程号nginx后 ...

  3. js特效代码-onmouseover/onclick 改变标签(背景)颜色

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  4. 用 openresty 编写 lua

    """ #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/erro ...

  5. 『Python』matplotlib坐标轴应用

    1. 设置坐标轴的位置和展示形式 import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl mpl.use ...

  6. p3c 插件,是怎么检查出你那屎山的代码?

    作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/RwzprbY2AhdgslY8tbVL-A 一.前言 你会对你用到都技术,好奇 ...

  7. 实例:建立图书借阅系统的UML模型

    1.需求分析 图书借阅系统的组成 2.具体的功能详细描述: (1)管理员登录系统,进入借书工作状态,等待借书处理. (2)读者找到所需图书,在借书处上刷卡机上刷卡. (3)管理员对借阅证进行资格审查. ...

  8. Idea生成JavaDoc文档

    什么是JavaDoc javadoc是Sun公司提供的一个技术 它从程序源代码中抽取类.方法.成员等注释形成一个和源代码配套的API帮助文档 实现方式 命令行方式 javadoc -encoding ...

  9. 【DP】Educational DP Contest

    这份 dp 题单的最后几题好难 orz. 前面的题比较简单,所以我会选取一些题来讲,其它的直接看代码理解吧 qwq. 传送门: https://atcoder.jp/contests/dp 全部 AC ...

  10. 使用python -m pip install 和 pip install 安装包有什么区别?

    如果去看源码的话,你会发现 pip 作为执行文件的入口点是 pip._internal.main. 另一方面,pip 作为模块运行时入口是 _main.py,而该模块也只是调用 pip.interna ...