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 ...
随机推荐
- Android之QQ新用户注册界面1
还没到睡觉时间所以再加了一个界面... 问题: 1.下拉列表(因为还没看到这里...) 2.标题栏显示问题 3.按钮的 Enable 设置 .......... 以下是代码: 布局 fragment_ ...
- 《Android深度探索HAL与驱动开发》第二章阅读心得
按照书中所讲的步骤,第一步先准备好搭建Android开发环境所需要的工具:JDK6或以上版本:Eclipse3.4或以上版本:ADT:CDT:Android SDK:Android NDK;交叉编译环 ...
- Apache Nutch build文件解析
本文目的:分析Apache Nutch 1.9的build.xml文件,从而让读者了解nutch的build全部流程
- linux命令之三
0102 文档查阅指令 cat tac nl 简单查阅,-n 可显示行 more, less less is more 查询大文件,可分页. head tail 从头尾看.-n 限制行数. taif ...
- 求第K大数
1.排序找第K个数 2.快速排序分块 时间复杂度 2呢
- dentry与inode有什么联系和区别
我们在进程中要怎样去描述一个文件呢?我们用目录项(dentry)和索引节点(inode).它们的定义如下: struct dentry {struct inode ...
- POJ 3666 Making the Grade
Description A straight dirt road connects two fields on FJ's farm, but it changes elevation more tha ...
- 在不安装mysql-connector-net的情况下使用FluentData框架
最近在开发项目中使用了FluentData框架,通过使用这个框架减少了很多开发的工作量,FluentData是一个轻量级的框架操作起来的自由度很大也少了很多负责的配置.但是在开发的时候发现一个问题就是 ...
- GridView
1.设置间隔变色 css: .oddRow{ background:#fafafa; } js: ,loadComplete:function(){ $("tr.jqgrow:odd&quo ...
- python 发邮件-带附件-文本-html
#!/usr/bin/python # encoding=utf-8 # Filename: send_email.py from email.mime.image import MIMEImage ...