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"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...
随机推荐
- 初探canvas
canvas是html5新增的一个专用于图形处理的标签,利用canvas可以实现大部分图形操作canvas的一些基本操作与其他图形编程工具类似,包含:各种形状的边框.路径绘制和填充,画布属性调整,样式 ...
- CSS3背景
1.背景的五种基本属性 background-color(背景颜色) background-image(背景图片) background-repeat(背景图片展示方式) background-a ...
- Qt之指针与float--setNum使用
案例: quint8 ad[8] = {0,100,150,200,0,220,230,250}; QString str; QString str2; ab = (float)(*((float * ...
- 【iCore2 模块相关资料】iM_LAN 100M 以太网模块UDP例程
============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...
- 曲线参数化的Javascript实现(代码篇)
在曲线参数化的Javascript实现(理论篇)中推出了曲线弧长积分的公式,以及用二分法通过弧长s来查找样条曲线上对应的u,再求Q(u)的值.弧长积分函数如下: ,其中-----公式1 Simpson ...
- 在oracle中通过connect by prior来实现递归查询!
注明:该文章为引用别人的文章,链接为:http://blog.csdn.net/apicescn/article/details/1510922 ,本人记录下来只是为了方便查看 原文: connect ...
- 算法练习:寻找最小的k个数
参考July的文章:http://blog.csdn.net/v_JULY_v/article/details/6370650 寻找最小的k个数题目描述:查找最小的k个元素题目:输入n个整数,输出其中 ...
- Map循环的三种方法
import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class MapTest { pu ...
- sql表结构和注释
SELECT 表名=case when a.colorder=1 then d.name else '' end, 表说明=case when a.colorder=1 then isnull(f.v ...
- Android RadioButton 语言无法切换问题
1.Dialog在不退出界面的情况下,RadioButton在语言切换时,无法匹配系统语言的问题: 解决办法为:在RadioButton添加属性 android:saveEnabled="f ...