stm32F051系列教程 1.点灯
第1课:点亮你的第一个LED灯
原理分析:
大家之前学习过51单片机,也使用过IO口。与ARM CORTEX M0的IO口配置有点区别,51不需要设置IO口为输入或者输出,而CORTEX M0的IO口有多种状态需要设置,那么下面我们一一介绍:
首先看看IO口的模式,如下寄存器说明,IO口可以配置为4种模式:输入模式,输出模式,复用模式,模拟通道模式。由于stm32f051系列多数的IO关键复用了其外设功能,比如I2C,SPI,UART等,此时就可以设置IO口为复用模式。模拟通道则作为AD,DA的时候使用:
如果大家使用库函数编程的时候,可以在 stm32f0xx_gpio.h文件中找到设置IO模式的结构体GPIOMode_TypeDef :
下面来介绍下输入和输出模式,其中输出模式如下图所示,分为推挽输出和开漏输出。这时候大家就要回忆下模电的课程了。
我使用下面一个等效图说明一下推挽输出和开漏输出。图所示:U1是输出锁存器,执行GPIO管脚写操作时,在写脉冲(Write Pulse)的作用下,数据被锁存到Q和/Q。T1和T2构成CMOS反相器,T1导通或T2导通时都表现出较低的阻抗,但T1和T2不会同时导通或同时关闭,最后形成的是推挽输出。
如图1.3所示,为GPIO管脚在开漏输出模式下的等效结构示意图。开漏输出和推挽输出相比结构基本相同,但只有下拉晶体管T1而没有上拉晶体管。同样,T1实际上也是多组可编程选择的晶体管。开漏输出的实际作用就是一个开关,输出“1”时断开、输出“0”时连接到GND(有一定内阻)。
同样大家使用库函数编程的时候,可以在 stm32f0xx_gpio.h文件中找到设置输出模式的结构体GPIOOType_TypeDef
同时我们可以设置IO端口输出的速度,在库函数中通过结构体来解决:
输入的模式可以分为上拉和下拉模式,这就比较简单了,寄存器的设置如下图:
同样大家使用库函数编程的时候,可以在 stm32f0xx_gpio.h文件中找到设置输入模式的结构体GPIOOPuPd_TypeDef
上面介绍完了STM32F051的IO端口有哪几种模式,现在就来点亮一个LED灯,学过51的同学可以回忆下,51是通过设置IO口输出0或者1来驱动LED灯的亮灭。在STM32F051中,我们通过设置IO端口为输出来点亮LED等。
硬件准备:
如上图所示: 青风STM32F051开发板上,通过管脚PA11和管脚PA12连接2个LED灯,我们下面的任务首先来点亮它。
软件准备:
按照第一章的介绍首先建立一个工程项目,采用库函数来在驱动IO口首先要添加几个驱动库,如下图所示:
上图红色框框中的几个文件都是ST官方给我们编好的库函数。那边用户在使用中,只需要编写led.c 驱动文件和main.c主函数就OK,整个工程项目大家如果加入分层的思想那么就对之后的移植非常有利。打个比方:底层和应用程隔离。底层驱动和应用层无关,main.c使用的函数在led.c驱动中已经些好,这些才和硬件有关,这是需要移植到不同硬件时,main主函数是可以不做任何修改的,只需要修改和底层相关的led.c驱动。
下面来分析下led .c的驱动编写:
上面的函数中GPIO_ResetBits函数和GPIO_SetBits函数在stm32f0xx_gpio.c驱动文件中所定义了。分别表示复位和置位相关IO管脚。
那么主函数的编写就比较简单了,我们需要调用下面2个头文件,才能够直接使用我们定义的子函数。如下使用LED_Open()函数就能够点亮一个LED灯了,是不是很简单。
那么加入一个小的延迟delay函数和打开与关闭LED子函数相结合,就可以实现LED闪烁的功能了,函数如下所示:
下载到青风STM32F051开发板上运行后的效果如下图所示:
如图所示,上方的用户led灯不停闪烁。
stm32F051系列教程 1.点灯相关推荐
- stm32F051系列教程 前哨篇 建立一个KEIL工程模板
前哨篇:如何建立一个KEIL工程模板 本节的内容主要针对的是初学者,有个熟练使用KEIL建立ARM工程项目的朋友可以略过: 首先大家安装KEIL for arm 4.3版本以上后,找到桌面的keil图 ...
- Xilinx ISE系列教程(2):LED点灯工程、仿真、bit下载和mcs固化
文章目录 @[toc] 1. 创建工程目录 2. 新建ISE工程 3. 新建verilog源文件 4. 新建testbench仿真文件 5. ISim功能仿真 6. 管脚分配和时钟约束 7. bit文 ...
- 高云FPGA系列教程(5):ARM点灯工程设计
文章目录 @[toc] 1. ARM核定制 2. ARM核程序设计 3. ARM程序烧写 4. 工程下载 本文是高云FPGA系列教程的第5篇文章. 前面几篇笔记都是介绍的高云GW1NSR-4C FPG ...
- AIR780E系列教程目录
AIR780E系列教程将包含,硬件设计,AT使用,CSDK开发和LuatOS开发多方面内容 软件与驱动 怎么在win7上安装AIR780E的USB驱动 AT使用 AIR780E使用AT连接TCP收发数 ...
- 高云FPGA系列教程(基于GW1NSR-4C TangNano 4K开发板)
文章目录 @[TOC] 已完成 待完成 已完成 国产FPGA高云GW1NSR-4C,集成ARM Cortex-M3硬核 高云FPGA系列教程(1):FPGA和ARM开发环境搭建 高云FPGA系列教程( ...
- 玩转RT-Thread系列教程(6)--移植STemwin
玩转RT-Thread系列教程(6)–移植STemwin 一.STemwin介绍 在实际应用中我们时常需要制作 UI 界面来实现人机交互,简单的 UI 我们可以自己直接写代码,但是对于那些复杂的交互方 ...
- Xilinx MicroBlaze系列教程(适用于ISE和Vivado开发环境)
本文是Xilinx MicroBlaze系列教程的第0篇文章. 这个系列文章是我个人最近两年使用Xilinx MicroBlaze软核的经验和笔记,以Xilinx ISE 14.7和Spartan-6 ...
- 毕设系列教程-基于Blinker和小爱同学的智能家居设计与现实-系统介绍
前言 本系列教程只是针对刚入门的小白,大佬不喜勿喷,为了帮助一些小白毕业生顺利毕业,帮助电子爱好者制作自己的智能家居DIY,尽量减少对专业知识的描述,如果有毕业设计要求的同学当然也可以提供毕业论文的参 ...
- php语+言教程,写给thinkphp开发者的laravel系列教程(九)打印数据-Fun言
php这种脚本语言调试起来是很方便的: 大多时候看报错打印一下数据就知道问题所在了: php 内置了常用打印函数 print 和 var_dump : 但是打印出来的样式实在让人目瞪狗呆: think ...
最新文章
- stm32 bootloader跳转
- framework调试
- ORACLE中科学计数法显示问题的解决
- mybatis学习(21):MySQL 字符串 转换 CAST与CONVERT 函数的用法
- replace使用案例--替换空格
- 18 WM配置-策略-激活仓位类型搜索(Bin Type Search)
- java对mysql的简单操作的综合运用——注册系统
- Vue只是JavaScript其中的一个框架
- 关于 hystrix 的异常 fallback method wasn‘t found
- ubuntu命令行下中文乱码的解决方案
- 2021高考 丽水成绩查询,2021年丽水中考成绩公布查询时间 丽水中考成绩查询方式入口...
- 精通Javascript之引用
- VBM_DARTEL算法对灰质变化的计算
- HTML5期末大作业dreamweaver作业静态HTML网页设计——甜点店(11页) 学生网页设计作品
- html5制作旋转正方体,html5—旋转立方体
- solidworks属性管理器_SolidWorks自定义属性——属性标签编制程序
- 热插拔48块硬盘服务器,24块前置热插拔硬盘设计
- java short转byte_java基础之short转换byte[]
- MATLAB 8.1 R2013a license.lic 问题
- Numpy 中的矩阵向量乘法
热门文章
- MangoTrainingCourse课程hands-on lab-1
- 百试不爽的求爱技巧百试不爽的求爱技巧
- 疑似一加Ace现身GeekBench:搭载天玑8100+12GB内存
- 盒马申请多个“屁股脸”商标被驳回!其IP盒马先生被网友戏称:“屁股脸”...
- 看过各地的方言标语,才明白什么叫文字的力量
- 苹果:我们一直在App Store上展示竞争对手的应用程序
- 外媒确认iPhone 13 Pro系列采用120Hz OLED面板:支持智能调节屏幕刷新率
- 比茅台还暴利!靠卖牌子年赚40个亿,如今被质疑造假
- 上海美特斯邦威成被执行人 执行标的超79万
- 产业链人士:存储芯片平均售价有望在明年一季度停止下滑 随后趋于稳定