目录

使用的开发板是:奋斗版STM32开发板V2​

一、参考开发手册

二、GPIO功能描述

三、GPIO寄存器概念

2.3.1 端口配置低寄存器(GPIOx_CRL) (x=A..E)

2.3.3 端口输入数据寄存器(GPIOx_IDR) (x=A..E)

四、开始实现LED灯闪烁

1.先创建新工程

2.选择芯片,这里选择的是STM32F103VE

3.创建.c文件


所使用的开发板是:奋斗版STM32开发板V2

使用该开发板 学习了控制LED灯闪烁。

前言

   主要就是会使用STM3210X的开发手册,会查看板子的原理图,理解总线的概念,会找寄存器

一、参考开发手册

 可以看到,LED1在GPIOB5。

二、GPIO功能描述

每个GPI/O 端口有两个32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32

位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32 位置位/复位寄存器

(GPIOx_BSRR),一个16 位复位寄存器(GPIOx_BRR)和一个32 位锁定寄存器

(GPIOx_LCKR)。

根据数据手册中列出的每个I/O 端口的特定硬件特征, GPIO 端口的每个位可以

由软件分别配置成多种模式。

− 输入浮空

− 输入上拉

− 输入下拉

− 模拟输入

− 开漏输出

− 推挽式输出

− 推挽式复用功能

− 开漏复用功能

每个I/O 端口位可以自由编程,然而I/0 端口寄存器必须按32 位字被访问(不允许

半字或字节访问)。GPIOx_BSRR 和GPIOx_BRR 寄存器允许对任何GPIO 寄存

器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ 时不会发生危险。

端口位配置表上图 

输出模式位

 

三、GPIO寄存器概念

2.3.1 端口配置低寄存器(GPIOx_CRL) (x=A..E)

偏移地址:0x00

复位值:0x4444 4444

2.3.3 端口输入数据寄存器(GPIOx_IDR) (x=A..E)

地址偏移:0x08

复位值:0x0000 0000

地址偏移:0Ch

复位值:00000000h

以上只是寄存器中的一些,stm中的寄存器一共有7组,每组有10个寄存器,大家想要了解可以查询相关的数据手册。

四、开始实现LED灯闪烁

1.先创建新工程

 

 

2.选择芯片,选择的是STM32F103VE

3.工程配置

整个工程包含4类源文件:

ASM
–startup_stm32f10x_hd.s 由于奋斗板采用的是STM32F103大存储器芯片,因此采用

STM32标准库自带的大存储器芯片启动代码,这个文件已经配置好了初始状态,以及

中断向量表。可以直接在工程里使用,如果你在以后的应用中采用了中存储器或者小

存储器STM32芯片,可以将启动代码换为startup_stm32f10x_md.s 或者

startup_stm32f10x_ld.s。

FWLIB
–stm32f10x_gpio.c ST公司的标准库,包含了关于对通用IO口设置的函数。

stm32f10x_rcc.c ST公司的标准库,包含了关于对系统时钟设置的函数。

CMSYS—是关于CORETEX-M3平台的系统函数及定义

USER
—main.c 例程的主函数。

RCC_Configuration() 完成对系统时钟的设置,例程中通过系统时钟设置函数,外

接晶振采用8Mhz,经过片内频率合成,9倍频,设置为72MHz的时钟。

LED_Config() 对控制3个LED指示灯的IO口进行了初始化,将3个端口配置为推挽上

拉输出,口线速度为50Mhz。

在配置某个口线时,首先应对它所在的端口的时钟进行使能。否则无法配置成功,

由于3个控制口用到了端口B和端口D, 因此要对这两个端口的时钟进行使能,

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD ,

ENABLE);

 

4.创建.c文件

代码如下:

#include "stm32f10x.h"

GPIO_InitTypeDef GPIO_InitStructure;
#define LED1_ON GPIO_SetBits(GPIOB, GPIO_Pin_5);  
#define LED1_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_5); 

#define LED2_ON GPIO_SetBits(GPIOD, GPIO_Pin_6);  
#define LED2_OFF GPIO_ResetBits(GPIOD, GPIO_Pin_6); 

#define LED3_ON GPIO_SetBits(GPIOD, GPIO_Pin_3);  
#define LED3_OFF GPIO_ResetBits(GPIOD, GPIO_Pin_3);  

void RCC_Configuration(void);
void LED_Config(void);
void Delay(__IO uint32_t nCount);
void LED_Config(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD , ENABLE);	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				     //LED1  V6	   //将V6,V7,V8 
   配置为通用推挽输出  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;			 //口线翻转速度为50MHz
  GPIO_Init(GPIOB, &GPIO_InitStructure);					 

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_3;		 //LED2, LED3	 V7 V8
  GPIO_Init(GPIOD, &GPIO_InitStructure);
}
int main(void)
{
  RCC_Configuration();   				//系统时钟配置
  LED_Config();							//LED控制配置
  while (1)
  {
  	LED1_ON; LED2_OFF; LED3_OFF;		
    Delay(0xAFFFF);
	LED1_OFF; LED2_ON; LED3_OFF;		
	Delay(0xAFFFF);
	LED1_OFF; LED2_OFF; LED3_ON;		
	Delay(0xAFFFF);    
  }
}
void RCC_Configuration(void)
{   
  SystemInit();
}
void Delay(__IO uint32_t nCount)
{
   for(; nCount != 0; nCount--);
}

 

编译工程, 完成后会提示如下。

这样就显示编译通过,然后连接到开发板载入程序。 

以上是学习stm32LED灯闪烁的心得体会。—-21物联网应用技术2班唐雯婷

物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32实现LED闪烁

发表评论