STM32F103标准库开发:LED跑马灯实验

发布者:zonheny最新更新时间:2022-09-21 来源: csdn关键字:STM32F103  LED跑马灯 手机看文章 扫描二维码
随时随地手机看文章

一、硬件电路分析

具体LED原理图如下图所示:

在这里插入图片描述

由LED原理图可知:

当单片机的引脚,PB14和PB15输出低电平的时候,LED1和LED2 亮 。

当单片机的引脚,PB14和PB15输出高电平的时候,LED1和LED2 灭。


二、LED灯GPIO配置

1. GPIO初始化配置

使能GPIO时钟

APB2外设时钟启用和禁用函数


/**

  *@功能:启用和禁用APB2外设时钟

  *@参数1:指定外围设备

  *@参数2:指定外围设备状态

  *@返回值:无

  */

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);


APB2外设如下:


#define RCC_APB2Periph_AFIO              ((uint32_t)0x00000001)

#define RCC_APB2Periph_GPIOA             ((uint32_t)0x00000004)

#define RCC_APB2Periph_GPIOB             ((uint32_t)0x00000008)

#define RCC_APB2Periph_GPIOC             ((uint32_t)0x00000010)

#define RCC_APB2Periph_GPIOD             ((uint32_t)0x00000020)

#define RCC_APB2Periph_GPIOE             ((uint32_t)0x00000040)

#define RCC_APB2Periph_GPIOF             ((uint32_t)0x00000080)

#define RCC_APB2Periph_GPIOG             ((uint32_t)0x00000100)

#define RCC_APB2Periph_ADC1              ((uint32_t)0x00000200)

#define RCC_APB2Periph_ADC2              ((uint32_t)0x00000400)

#define RCC_APB2Periph_TIM1              ((uint32_t)0x00000800)

#define RCC_APB2Periph_SPI1              ((uint32_t)0x00001000)

#define RCC_APB2Periph_TIM8              ((uint32_t)0x00002000)

#define RCC_APB2Periph_USART1            ((uint32_t)0x00004000)

#define RCC_APB2Periph_ADC3              ((uint32_t)0x00008000)

#define RCC_APB2Periph_TIM15             ((uint32_t)0x00010000)

#define RCC_APB2Periph_TIM16             ((uint32_t)0x00020000)

#define RCC_APB2Periph_TIM17             ((uint32_t)0x00040000)

#define RCC_APB2Periph_TIM9              ((uint32_t)0x00080000)

#define RCC_APB2Periph_TIM10             ((uint32_t)0x00100000)

#define RCC_APB2Periph_TIM11             ((uint32_t)0x00200000)


本次配置如下:


RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); // 使能PB端口时钟 


GPIO初始化配置信息

工作模式可以参考:STM32F103:GPIO八种工作原理详解


GPIO初始化函数如下


/**

  *@功能:初始化GPIO外设

  *@参数1:指定GPIO外设(GPIOA~GPIOG)

  *@参数2:指定GPIO外设的配置信息

  *@返回值:无

  */

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);


GPIO_InitTypeDef----GPIO初始化配置信息:


typedef struct

{

  uint16_t GPIO_Pin;             //指定要配置的GPIO引脚

  GPIOSpeed_TypeDef GPIO_Speed;  //指定所选引脚的速度

  GPIOMode_TypeDef GPIO_Mode;    //指定所选引脚的工作模式


}GPIO_InitTypeDef;


GPIO_Pin----指定要配置的GPIO引脚:


#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */

#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */

#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */

#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */

#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */

#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!< Pin 5 selected */

#define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!< Pin 6 selected */

#define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!< Pin 7 selected */

#define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!< Pin 8 selected */

#define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!< Pin 9 selected */

#define GPIO_Pin_10                ((uint16_t)0x0400)  /*!< Pin 10 selected */

#define GPIO_Pin_11                ((uint16_t)0x0800)  /*!< Pin 11 selected */

#define GPIO_Pin_12                ((uint16_t)0x1000)  /*!< Pin 12 selected */

#define GPIO_Pin_13                ((uint16_t)0x2000)  /*!< Pin 13 selected */

#define GPIO_Pin_14                ((uint16_t)0x4000)  /*!< Pin 14 selected */

#define GPIO_Pin_15                ((uint16_t)0x8000)  /*!< Pin 15 selected */

#define GPIO_Pin_All               ((uint16_t)0xFFFF)  /*!< All pins selected */


GPIO_Speed----指定所选引脚的速度:


typedef enum

  GPIO_Speed_10MHz = 1,

  GPIO_Speed_2MHz, 

  GPIO_Speed_50MHz

  

}GPIOSpeed_TypeDef;

GPIO_Mode----指定所选引脚的工作模式:


typedef enum

GPIO_Mode_AIN = 0x0, //模拟输入模式

  GPIO_Mode_IN_FLOATING = 0x04, //浮空输入模式

  GPIO_Mode_IPD = 0x28, //下拉输入模式

  GPIO_Mode_IPU = 0x48, //上拉输入模式

  GPIO_Mode_Out_OD = 0x14, //开漏输出模式

  GPIO_Mode_Out_PP = 0x10, //推挽输出模式

  GPIO_Mode_AF_OD = 0x1C, //复用开漏输出模式

  GPIO_Mode_AF_PP = 0x18 //复用推挽输出模式

 

}GPIOMode_TypeDef;


本次配置如下:


  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15; // PB14,PB15

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽输出模式

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50mHz速度

  GPIO_Init(GPIOB, &GPIO_InitStructure);  //初始化PB端口


2. GPIO输出控制配置

GPIO引脚置高函数


/**

  *@功能:GPIO引脚置高

  *@参数1:指定GPIO外设

  *@参数2:指定GPIO外设的引脚端口号

  *@返回值:无

  */

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);


GPIO引脚置低函数


/**

  *@功能:GPIO引脚置低

  *@参数1:指定GPIO外设

  *@参数2:指定GPIO外设的引脚端口号

  *@返回值:无

  */

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);


本次配置如下:


GPIO_SetBits(GPIOB,GPIO_Pin_14); //PB14置高

GPIO_ResetBits(GPIOB,GPIO_Pin_14); //PB14置低


3. 具体程序

LED.c文件


#include "led.h"


/***************  配置LED用到的I/O口 *******************/

void LED_GPIO_Config(void)

{

  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); // 使能PB端口时钟 

  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15; // PB14,PB15

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽输出模式

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50mHz速度

  GPIO_Init(GPIOB, &GPIO_InitStructure);  //初始化PB端口

}


LED.h文件


#ifndef __LED_H

#define __LED_H  


#include "stm32f10x.h"


#define LED1(a) if (a)

GPIO_ResetBits(GPIOB,GPIO_Pin_14);

else

GPIO_SetBits(GPIOB,GPIO_Pin_14)

#define LED2(a) if (a)

GPIO_ResetBits(GPIOB,GPIO_Pin_15);

else

GPIO_SetBits(GPIOB,GPIO_Pin_15)


void LED_GPIO_Config(void); //LED初始化配置


#endif 


三、LED跑马灯

1. 延时函数

精准延时delay文件链接


2. LED跑马灯实现

#include

#include "led.h"

#include "delay.h"


int main (void)

{

SystemCoreClockUpdate(); //设置系统时钟为72M

LED_GPIO_Config(); //LED初始化配置


while(1)

{

LED1(1); //LED1亮

LED2(0); //LED2灭

delay_ms(200); //延时200ms

LED1(0); //LED1灭

LED2(1); //LED2亮

delay_ms(200); //延时200ms

}

}


关键字:STM32F103  LED跑马灯 引用地址:STM32F103标准库开发:LED跑马灯实验

上一篇:STM32F103标准库开发---Uart串口通信实验---初始化配置
下一篇:STM32F103标准库开发:Keil5新建STM32工程

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved