基于STM32实现LED灯闪烁-20210320069-苏荣意

该文详细介绍了基于STM32F103开发板的LED闪烁程序设计过程,包括硬件电路设计和软件程序设计。通过RCC_Configuration()和LED_Config()函数初始化系统时钟和GPIO,使得蓝色状态指示灯V2按特定顺序点亮。主要涉及的源文件有启动代码、STM32标准库以及主函数代码。
摘要由CSDN通过智能技术生成

这条博客是基于奋斗开发板MINI。

通用IO口功能我就不详细诉说了

设计要求

开发板上蓝色状态指示灯V2使它们有规律的点亮,具体顺序如下:V2亮->V2灭,如此反复。

硬件电路设计

在开发板上V2与MCU的PB5相连,如下图所示

 软件程序设计

根据任务要求,程序内容主要包括:

初始化后,LED依次点亮。

整个工程包含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() 对控制1个LED指示灯的IO口进行了初始化,将P5端口配置为推挽上 拉输出,口线速度为50Mhz。 在配置某个口线时,首先应对它所在的端口的时钟进行使能。否则无法配置成功, 由于P5控制口用到了端口B和端口D, 因此要对这两个端口的时钟进行使能,

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD , ENABLE);

程序中对各状态LED进行了预定义:

#define LED1_ON GPIO_SetBits(GPIOB, GPIO_Pin_5);

#define LED1_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_5);

main.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); //重置位
 
void RCC_Configuration(void);     //LED初始化函数
void LED_Config(void);            //系统时钟配置函数
void Delay(__IO uint32_t nCount); //延时函数
 
void LED_Config(void)    //LED 控制初始化函数
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD , ENABLE);	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				     //LED1  V2	   //将V2配置为通用推挽输出  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;           //GPIO模式输出为PP
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;			 //口线翻转速度为50MHz
  GPIO_Init(GPIOB, &GPIO_InitStructure);					 //GPIO初始化
}
 
int main(void)    //主函数
{
  RCC_Configuration();   				//系统时钟配置
  LED_Config();							//LED控制配
  while (1)
  {
		
  	LED1_ON;		//LED1亮
    Delay(0xAFFFF);
  	LED1_OFF;		//LED1灭
    Delay(0xAFFFF);
  }
}
 
void RCC_Configuration(void)    //系统时钟配置函数
{
  SystemInit();    //系统时钟配置为72MHZ
}
 
void Delay(__IO uint32_t nCount)    //延时函数
{
   for(; nCount != 0; nCount--);
}

通过以上操作烧入程序我们就可以让LED灯闪烁了

物联网应用技术二班-20210320069-苏荣意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值