STM32学习笔记——点亮LED
STM32学习笔记——点亮LED
本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本;
先简单的介绍一下stm32的GPIO;
stm32的GPIO有多种模式:
1.输入浮空
2.输入上拉
3.输入下拉
4.模拟输入
5.开漏输出
6.推挽式输出
7.推挽式复用功能
8.开漏复用功能
stm32GPIO模式设置相关寄存器设置的介绍

stm32中文参考手册中对GPIO模式设置对应寄存器的详细介绍:


下图为开发板LED的接线图;

根据上面的电路图可知,将GPIOB_0,GPIOF_7和GPIOF_8设置为低电平时,LED将被点亮;
程序代码:
LED.h 文件
#ifndef __LED_H
#define __LED_H void GPIO_Init(void); #endif
stm32.h 文件
#ifndef __STM32_H
#define __STM32_H //引脚寄存器定义 //GPIO对应寄存器起始地址 #define GPIOA 0x40010800
#define GPIOB 0x40010C00
#define GPIOC 0x40011000
#define GPIOD 0x40011400
#define GPIOE 0x40011800
#define GPIOF 0x40011C00
#define GPIOG 0x40012000 //寄存器偏移地址 #define GPIOx_CRL 0x00
#define GPIOx_CRH 0x04
#define GPIOx_IDR 0x08
#define GPIOx_ODR 0x0c
#define GPIOx_BSRR 0x10
#define GPIOx_BRR 0x14
#define GPIOx_LCKR 0x18 #define GPIOB_CRL *((volatile unsigned int *)(GPIOB + GPIOx_CRL))
#define GPIOB_CRH *((volatile unsigned int *)(GPIOB + GPIOx_CRH))
#define GPIOB_IDR *((volatile unsigned int *)(GPIOB + GPIOx_IDR))
#define GPIOB_ODR *((volatile unsigned int *)(GPIOB + GPIOx_ODR))
#define GPIOB_BSRR *((volatile unsigned int *)(GPIOB + GPIOx_BSRR))
#define GPIOB_BRR *((volatile unsigned int *)(GPIOB + GPIOx_BRR))
#define GPIOB_LCKR *((volatile unsigned int *)(GPIOB + GPIOx_LCKR)) #define GPIOF_CRL *((volatile unsigned int *)(GPIOF + GPIOx_CRL))
#define GPIOF_CRH *((volatile unsigned int *)(GPIOF + GPIOx_CRH))
#define GPIOF_IDR *((volatile unsigned int *)(GPIOF + GPIOx_IDR))
#define GPIOF_ODR *((volatile unsigned int *)(GPIOF + GPIOx_ODR))
#define GPIOF_BSRR *((volatile unsigned int *)(GPIOF + GPIOx_BSRR))
#define GPIOF_BRR *((volatile unsigned int *)(GPIOF + GPIOx_BRR))
#define GPIOF_LCKR *((volatile unsigned int *)(GPIOF + GPIOx_LCKR)) #endif
LED.c 文件
#include "LED.h"
#include "stm32.h" void delay(unsigned int x)
{
volatile int i, j;
for(i = ; i < x; i++)
{
for(j = ; j < ; j++);
}
} void GPIO_Init(void)
{
//使能GPIOB和GPIOF的时钟
RCC_APB2ENR |= << ;
RCC_APB2ENR |= << ; //清除GPIOB和GPIOF的配置寄存器
GPIOB_CRL &= ~(0xf << );
GPIOF_CRL &= ~(0xf << );
GPIOF_CRH &= ~(0xf << ); //配置GPIOB和GPIOF的端口为通用推挽输出,输出速度为50HZ
GPIOB_CRL |= << ;
GPIOF_CRL |= << ;
GPIOF_CRH |= << ; //设置GPIOB_0和GPIOF_7和GPIOF_8输出为高电平
GPIOB_ODR |= << ;
GPIOF_ODR |= << ;
} int main(void)
{
GPIO_Init(); GPIOB_ODR &= ~( << ); //设置GPIOB_0端口输出为低电平
GPIOF_ODR &= ~( << ); //设置GPIOF_7和GPIOF_8输出为低电平
while()
{
GPIOB_ODR &= ~( << ); //设置GPIOB_0端口输出为低电平
GPIOF_ODR |= << ; //设置GPIOF_7和GPIOF_8输出为高电平
delay(); GPIOB_ODR |= << ; //设置GPIOB_0端口输出为高电平
GPIOF_ODR &= ~( << ); //设置GPIOF_7输出为低电平
delay(); GPIOF_ODR &= ~( << ); //设置GPIOF_7输出为高电平
GPIOF_ODR |= << ; //设置GPIOF_8输出为低电平
delay();
} }
程序将实现流水灯的效果;
在使用GPIO时一定要将相应GPIO的时钟开启;
参考资料:
文献:stm32中文参考手册V_10
视频:正点原子战舰stm32f103 V3教学视频
如有错误,请批评指正,小弟将不甚感激
STM32学习笔记——点亮LED的更多相关文章
- FPGA学习笔记——点亮LED
软件平台:win7(64bit) + Quartus II 9.1 (64-Bit) 硬件平台:东理电子Easy-FPGA Cyclone II EP2C5T114C8N 这个开发板买了很长时间了,买 ...
- STM32学习笔记(四)——串口控制LED(中断方式)
目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...
- stm32学习笔记——外部中断的使用
stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...
- STM32学习笔记——OLED屏
STM32学习笔记--OLED屏 OLED屏的特点: 1. 模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2. 显示尺寸为0.96寸 3. 分辨率为128*64 4. ...
- stm32学习笔记----双串口同时打开时的printf()问题
stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...
- STM32学习笔记-NVIC中断知识点
STM32学习笔记-NVIC中断知识点总结 中断优先级设置步骤 1. 系统运行后先设置中断优先级分组 函数:void NVIC_PriorityGroupConfig(uint32_tNVIC_Pri ...
- STM32学习笔记(一)——点亮一个LED
引言 最近报名了2017全国大学生电子设计竞赛,我们学校是第一次参加这个比赛,由于8/9月份就要比赛了,所以现在准备是比较晚的了,指导老师说只能做控制类的题目了,让我们学习一下STM32单片机,51到 ...
- STM32学习笔记(二)——串口控制LED
开发板芯片:STM32F407ZGT6 PA9-USART1_TX,PA10-USART1_RX; PF9-LED0,PF10-LED1; 一.串口1配置过程(不使用串口中断): 1.使能时钟,包括G ...
- STM32学习笔记(二) 基于STM32-GPIO的流水灯实现
学会了如何新建一个工程模板,下面就要开始动手实践了.像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...
随机推荐
- placeholder 不支持IE修复
<script type="text/javascript"> var JPlaceHolder = { //检测 _check : function(){ retur ...
- 浅谈c语言的指针
对于非计算机专业的同学,c语言的指针往往就是老师的一句“指针不考“就带过了.c语言的指针号称是c语言的灵魂,是c语言中最精妙的部分. 指针本质上也是变量,也就是一段内存,只是他的特殊之处是他存储的数据 ...
- Python开发入门与实战20-微信开发配置
随着移动互联网时代的来临,微信已经成为移动互联网移动端的主要入口,现在很多的大型企业都有自己的微信服务号,如:银行业有自己的微银行,基金公司的公众服务号.通过微信入口可以方便快速的实现企业提供的服务. ...
- vs2012 opencv 配置
一直没有学习C++,以为该语言太过old,所以要学习新的咚咚.一番学习归来,在进行OpenCV的时候,还是要用到这个C++.几次琢磨,终于能够配置好相关的开发环境和问题初步处理,有些内容得赶快记录下来 ...
- 用profile分析算法性能
在命令行输入:profile viewer 会出现如下图所示探查器: 在运行此代码的后面的输入框中输入要运行的程序,然后点击启动探查,就会自动探查. 探查结束之后,会给出每个函数的调用次数.运行时间等 ...
- 大视野3562 [SHOI2014]神奇化合物
http://www.lydsy.com/JudgeOnline/problem.php?id=3562 //Accepted 6020 kb 1012 ms //由于题目的特殊要求:然而,令科学家们 ...
- unix下输出重定向
> 为重定向符号 >> 重定向不覆盖原文件内容 example: 1. 标准输出重定向 echo "123" > /home/123.txt ---- 标准 ...
- 1.6jdk + eclipse + pydev搭建Python开发环境
直接在1.6jdk的eclipse上用install new software的方法安装插件,会找不到安装好的插件.pydev官网还提供一种zip直接解压插件到eclipse文件夹下的dropins文 ...
- Oracle 导入导出--and一些知识,备忘
这两天在做迁移Ora数据库,有一个圆友帮忙,哈哈,两个臭皮匠顶半个诸葛亮. 本来以为很简单的就imp和exp就欧了,结果各种状况百出,百度了老多,学到好多东西. 你的导出:exp yc/yc@orcl ...
- linux编译c文件
1.创建.c文件,比如在firstmake文件夹创建了一个a.c文件,那么编译语句为: gcc -o firstmake a.c //格式为文件夹名 文件名 2.然后就会生成一个firstmake.o ...