STM32F407第一步之点亮LED
STM32F407第一步之点亮LED。
要点亮LED,首先了解一下F4的GPIO模块。首先看一下STM32F4数据手册,GPIO模块的内部结构图

看上去有点复杂,不要怕,慢慢理解就可以了。对外引脚那里二极管就是保护的作用。通过上、下拉对应的开关配置,控制引脚默认状态的电压,开启上拉的时候引脚电压为高电平,开启下拉的时候引脚电压为低电平,这样可以消除引脚不定状态的影响。但是这个不应该用来作为外部的上拉或下拉用,如按键的拉电阻不能用这个内部来作用,如果用可能会引起按键不稳定。
GPIO 具有了“推挽输出”和“开漏输出”两种模式。在该结构中输入高电平时,上方的 P-MOS 导通,下方的 N-MOS 关闭,对外输出高电;而在该结构中输入低电平时, N-MOS 管导通, P-MOS 关闭,对外输出低电平。当引脚高低电平切换时,两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。
输出数据寄存器:由 GPIO“输出数据寄存器GPIOx_ODR”提供的,因此通过修改输出数据寄存器的值就可以修改 GPIO 引脚的输出电平。而“置位/复位寄存器 GPIOx_BSRR”可以通过修改输出数据寄存器的值从而影响电路的输出。
“复用功能输出”中的“复用”是指 STM32 的其它片上外设对 GPIO 引脚进行控制,此时 GPIO 引脚用作该外设功能的一部分,算是第二用途。但是同一时刻只能用一个功能,如有的GPIO具有SIP功能,又具有I2C功能,在使用时只能配置成一种功能,要么是SPI要么是I2C。
输入数据寄存器:GPIO 引脚经过上、下拉电阻后引入的,它连接到施密特触发器,信号经过触发器后,模拟信号转化为 0、 1 的数字信号,然后存储在“输入数据寄存器 GPIOx_IDR”中,通过读取该寄存器就可以了解 GPIO 引脚的电平状态。
基本就是这样的了,具体的要参考STM32F4参考手册。
对于点亮LED来说,首先看一下电路图,确认一下是高电平1点亮还是低电平0点亮。
由以上原理图可以确定,三个灯是低电平0点亮的,那了解了GPIO的基本配置开始设计程序了,采用库函数方式,所以要添加相应的文件,stm32f4xx_gpio.c
1、首先是配置LED对应GPIO引脚,让这些引脚设置为输出。
static int initialize( void )
{
GPIO_InitTypeDef uGPIO_InitStructure;
//映射时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI,ENABLE);
//配置引脚相关参数
uGPIO_InitStructure.GPIO_Pin = LED_RED_PIN | LED_GREEN_PIN | LED_BLUE_PIN; //设置连接三色LED灯的IO端口
uGPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //设置端口为输出模式
uGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
uGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
uGPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //设置速度
GPIO_Init(GPIOI,&uGPIO_InitStructure);
//
GPIO_SetBits(GPIOI,LED_RED_PIN | LED_GREEN_PIN | LED_BLUE_PIN);
}
2、可以操作LED对应引脚的高低电平,让LED能亮与灭。
//LOW-ON
#define LED_RED_OFF GPIO_SetBits(LED_RED_PORT,LED_RED_PIN);
#define LED_RED_ON GPIO_ResetBits(LED_RED_PORT,LED_RED_PIN);
#define LED_GREEN_OFF GPIO_SetBits(LED_GREEN_PORT,LED_GREEN_PIN);
#define LED_GREEN_ON GPIO_ResetBits(LED_GREEN_PORT,LED_GREEN_PIN);
#define LED_BLUE_OFF GPIO_SetBits(LED_BLUE_PORT,LED_BLUE_PIN);
#define LED_BLUE_ON GPIO_ResetBits(LED_BLUE_PORT,LED_BLUE_PIN);
STM32F407第一步之点亮LED的更多相关文章
- Mini2440上的第一个程序——点亮Led
手头的Mini2440搁置了两年半之后,我再次决定拿出它,重新尝试嵌入式Linux的学习. 我使用的是友善之臂的Mini2440开发板.韦东山的<嵌入式Linux应用开发完成手册>及其视频 ...
- [TPYBoard-Micropython教程之1] 运行第一个脚本——点亮LED
转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 会python就能做硬件! 一.TPYBoard V102开发板 TPYBoard V102 ...
- [TPYBoard - Micropython之会python就能做硬件 1] 运行第一个脚本——点亮LED
转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 会python就能做硬件! 一.TPYBoard V102开发板 TPYBoard V102 ...
- 面对一个新的MCU,我再也不敢说第一步是点灯了
折腾了几天AT91SAM3S,今天才算是把开发板上的3个LED点亮. 在点亮之前,起码看了百八十页的Datasheet,动用了N次百度. 各种时钟,看门狗,分散加载,中断向量,都得去整.这些都远远超过 ...
- arm-点亮led灯
点亮指路灯:学习四环节:led原理图分析,芯片手册导读,思维导图设计,为什么要使用led:通常led是作为程序调试的重要手段.led原理图:led实质为发光二极管,当其两端电压一定时,即处于导通状态. ...
- 使用寄存器点亮LED——编程实战
stm32的编程和stc89c51还是存在着很多思想上的不同的,在51单片机中,我们点亮LED灯,只用给对应IO高低电平就可以了,而stm32中,就一个简单的GPIO,我们也需要配置好几个寄存器,而且 ...
- 使用寄存器点亮LED——前言基础知识
在点亮LED之前,我们需要具备一些基础知识: GPIO—general purpose intput output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚 ...
- 字符型设备驱动程序-first-printf以及点亮LED灯(三)
根据 字符型设备驱动程序-first-printf以及点亮LED灯(二) 学习 修改函数 中的printf 为 printk. #include <linux/module.h> /* ...
- STM32 基于 CubeMX配置GPIO点亮LED灯(超级详细+图文并茂)
我是一个只会点灯的菜鸟: 相关文章 [STM32系列汇总]小白博主的STM32实战快速进阶之路(持续更新) 文章目录 相关文章 1 前言 2 理论分析 2.1 LED 原理 2.2 板载资料 2.3 ...
随机推荐
- Javascript 右移0位的作用
Javascript 中右移0位可以用来快速去掉小数,关于位移运算的定义: 右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位. 实际看下 ...
- Android之QQ新用户注册界面1
还没到睡觉时间所以再加了一个界面... 问题: 1.下拉列表(因为还没看到这里...) 2.标题栏显示问题 3.按钮的 Enable 设置 .......... 以下是代码: 布局 fragment_ ...
- 安装Fedora 24后必要的设置
安装Fedora 24后必要的设置 导读 Fedora 是一个 Linux 发行版,是一款由全球社区爱好者构建的面向日常应用的快速.稳定.强大的操作系统.它允许任何人自由地使用.修改和重发布,无论现在 ...
- 根据内存布局定位的一个fastdfs坑
在使用fastdfs时,编写数据上传代码时,遇到一个坑.最终根据指针对应的内存布局定位到一个其client API的一个坑,值得记录一下.具体是在 tracker_connect_server() 这 ...
- git提交远程仓库命令
在已有的git库中搭建新库,并且将本地的git仓库,上传到远程服务器的git库中,从而开始一个新的项目 首先,在本地新建文件夹abc,进入到abc里面,然后git init.这样就在本地初始化了一个g ...
- python pickle 序列化类
python pickle 序列化类 # coding:utf-8 try: import cPickle as pickle except ImportError: import pickle cl ...
- mysql 联合索引和唯一索引
一般来说.如果有where a=? and b=? and c=? 的语句. 如果表也有DML, 我一般只在a 上建索引. 这也是代价平衡的结果. 一方面 只在a 上建索引那么是 index ran ...
- LINQ 联表查询 取count 值
linq to sql 实现左外部连接:var query=from a in A join b in B on a.ID equals b.aID into ab from a1 in ab.Def ...
- JS关于时间的计算
用javascript返回两个时间差,精确到秒: Date.diff = function(a,b){ if(a instanceof Date && b.ins ...
- IOS 制作启动画面
启动方式简述 IOS 8 及之前: Launch Images Source方式, IOS8 及之后: 1, Launch Images Source方式 : 2 , LaunchScreen. ...