一、硬件电路分析
具体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标准库开发---Uart串口通信实验---初始化配置
下一篇:STM32F103标准库开发:Keil5新建STM32工程
- 热门资源推荐
- 热门放大器推荐
设计资源 培训 开发板 精华推荐
- 使用 NXP Semiconductors 的 MKV58F1M0VLQ2 的参考设计
- LT8330ES6 4V 至 36V 输入、-12V 反相转换器的典型应用电路
- VIPER06HS-使用VIPer™Plus的4W、12V输出隔离式反激转换器
- #第七届立创电赛#暑期训练营
- LT1619,SEPIC 转换从一个 12V 电池以 1A 提供 5V
- USB PD 消费者/提供者(智能手机用例)——使用 PTN5100 的独立应用
- 使用 NXP Semiconductors 的 MK70FN1M0VMJ12 的参考设计
- dianyuan
- 使用 Analog Devices 的 LT1317CS8 的参考设计
- 使用 AD5452、12 位、1 通道电流输出 DAC 系列的可编程增益元件
- 首都医科大学王长明:针对癫痫的数字疗法已进入使用阶段
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计
- Melexis采用无磁芯技术缩小电流感测装置尺寸
- 千丘智能侍淳博:用数字疗法,点亮“孤独症”儿童的光
- 数药智能冯尚:ADHD数字疗法正为儿童“多动症”提供更有效便捷服务
- Vicor高性能电源模块助力低空航空电子设备和 EVTOL的发展