STM32初学点亮一个LED灯
点亮一个LED灯
1、 原理图
2、 程序编写
1) 建立一个工程。
2) 添加库文件。
core_cm3.c
system_stm32f10x.c
startup_stm32f10x_hd.s
stm32 library
3) 建立main函数文件
3、加载.h文件
点击
在Options for Target下 Include Paths框内添加.h的路径。
在Preprocessor Symbols 下 Define框中添加USE_STDPERIPH_DRIVER,STM32F10X_HD
stm32开发环境加入STM32F10X_HD和USE_STDPERIPH_DRIVER两个宏。
第一:
在stm32f10x.h中有以下语句:
#error命令是C/C++语言的预处理命令之一,当预处理器预处理到#error命令时将停止编译并输出用户自定义的错误消息。
语法:
#error [用户自定义的错误消息]
注:上述语法成份中的方括号“[]”代表用户自定义的错误消息可以省略不写。
举例:
#error “Sorry,an error has occurred!”
可见,只有我们定义了STM32F10X_HD这个宏,才可以顺利编译,进而,根据定义的这个宏,定义将会用到的与外设有关的宏!!!
============================================================================================================
第二:
在stm32f10x.h中有以下语句:
只有在开发环境中定义了USE_STDPERIPH_DRIVER宏,才可以将stm32f10x_conf.h头文件包含进来,
而正是stm32f10x_conf.h这个头文件,将我们要用到的…\STM32F10x_FWLib\inc目录下的23个头文件都包含了进来!
否则,我们无法使用…\STM32F10x_FWLib\src中的固件库了!!!
3、 GPIO初始化
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure);
============================================================================================================
(1)声明一个结构体 GPIO_InitTypeDef GPIO_InitStructure;
这个结构体中包括GPIO_Pin 、GPIO_Mode、GPIO_Speed 。
(2)端口使能: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);
调用上述函数,函数参数第一个是你要使能端口,第二个是ENABLE,就是使能。如果其中用到几个端口,在第一个参数中
用或运算“|”连接,就可以同时声明几个端口。
(3) GPIO_InitStructure.GPIO_Pin 端口配置,就是你要用哪个IO口
GPIO_InitStructure.GPIO_Mode 模式设置,表明IO口的功能是什么,在STM32中IO口有8种模式
GPIO_InitStructure.GPIO_Speed IO口速度设置,在STM32中IO口有3中速度
注: IO口的八种模式:1、输入浮空 2、输入上拉 3、输入下拉 4、模拟输入 5、开漏输出 6、推挽输出 7、推挽式复用功能 8、开漏复用功能
IO口的三种速度:10MHZ、2MHZ、50MHZ
(4)根据设定参数初始化GPIO口 GPIO_Init(GPIOA, &GPIO_InitStructure);
5、IO的高低电平操作
GPIO_SetBits 寄存器:BSRR
GPIO_ResetBits 寄存器:BRR
GPIO_WriteBit 寄存器:BSRR BRR
GPIO_Write 寄存器:ODR
这两个调用的寄存器不同,功能也不同。区别在于
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 置高
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 置低
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
前者是直接对IO进行操作,而后者的输入是对整个IO口,如PA口进行操作,你要那位高就在那位置“1”,所以第二组函数的第三个参数应该为一个十六进制的数。
一般情况下使用使用第一组比较方便。
void LED_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_2); GPIO_SetBits(GPIOA,GPIO_Pin_4); GPIO_SetBits(GPIOA,GPIO_Pin_6); }
- STM32学习(一)——点亮一个LED灯
- CubeMx 二、STM32F103点亮一个LED灯
- STM32移植contiki入门之二:简单编程点亮LED灯
- ARM学习——从点亮一个LED灯开始(裸机)
- 妈蛋,终于在TQ2440上点亮一个led了。。。
- 从点亮一个LED开始,Cortex-A9裸机程序设计
- A8逻辑篇1.点亮一个LED(S5PV210.A8)
- MSP430F1612 第一个程序,点亮一个LED灯
- STM32用寄存器点亮LED灯
- STM32学习第一课——新建工程与点亮LED灯
- arduino红外测距模块点亮一个LED灯
- stm32初学之LED按键中断
- STM32学习笔记——控制GPIO输出点亮LED灯(直接操作存储器)
- 点亮一个LED灯
- STm32 使用 stm32cube GPIO 点亮 led 的
- GPIO-点亮一个LED(JZ2440-S3C2440)
- 转STM32自学系列——1.gpio(通用复用输入输出口)应用点亮LED和微动开关
- linux一个led点亮功能的实现流程
- STM32-新建工程,点亮led
- jz2440裸板开发之GPIO:点亮一个led灯(1)