STM32-自学笔记(6.用GPIO点亮LED)

实验说明:将两个LED灯点亮,隔一段时间后,将它们熄灭。

硬件电路

如图 GPIOA.2引脚连接LED灯,在连接一个1kΩ的限流电阻,最后接地。

         GPIOA.3引脚连接LED灯,在连接一个1kΩ的限流电阻,最后接地。(很简单)

主要来看软件设计(程序设计)

需要注意的几点

  • 置RCC寄存器组,使PLL输出72MHz时钟频率。
  • 配置GPIOA.2和GPIOA.3为推挽输出,最大翻转频率为50MHz。
  • 通过在GPIOA.2和GPIOA.3上输出高电平点亮LED,反之输出低电平则熄灭LED。

程序:

主函数main.c

#include"stm32f10x_lib.h"                                     //头文件

#define Delay(n)                                              //自定义变量

void RCC_Configuration (void);

void GPIO_Configuration (void);

int main (void)

{

vu32  n=2000000;                                     //定义延时函数

RCC_Configuration();                                 //设置系统时钟

GPIO_Configuration();                                //设置GPIO端口

GPIO_SetBits(GPIOA,GPIO_Pin_2);                      //设置GPIOA.2为高电平

GPIO_SetBits(GPIOA,GPIO_Pin_3);                      //设置GPIOA.3为高电平

Delay(n);                                            //延时

GPIO_ResetBits(GPIOA,GPIO_Pin_2);                    //设置GPIOA.2为低电平  

GPIO_ResetBits(GPIOA,GPIO_Pin_3);                    //设置GPIOA.3为低电平

while(1);

{

}

}

设置系统各部分时钟   RCC_Configuration

void RCC_Configuration(void)

{

ErrorStatus HSEStartUpStatus;      //定义枚举类型变量 HSEStartUpStatus

RCC_DeInit();                     //复位系统时钟设置

RCC_HSEConfig(RCC_HSE_ON);         //开启HSE

HSEStatrtUpStatus=RCC_WaitForHSEStartUp();   //等待HSE起振并稳定

if(HSEStatrtUpStatus==SUCCESS)     //判断HSE是否起振成功,是则进入if()内部

{

RCC_HCLKConfig(RCC_SYSCLK_Div1);   //选择HCLK(AHB)时钟源为SYSCLK分频

RCC_PCLK2Config(RCC_HCLK_Div1);    //选择PCLK2时钟源为HCLK(AHB)1分频

RCC_PCLK1Config(RCC_HCLK_Div2);    //选择PCLK1时钟源为HCLK(AHB)2分频

FLASH_SetLatency(FLASH_Latency_2);  //设置Flash延时周期数为2

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);   //使能Flash预取缓存

//选择PLL时钟源为 HSE 1 分频,倍频数为9,则PLL=8MHz *9=72MHz

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

RCC_PLLCmd(ENABLE);                  //使能PLL

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);  //等待PLL输出稳定

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);    //选择SYSCLK时钟源为PLL

while(RCC_GetSYSCLKSource()!=0x08);      //等待PLL成为SYSCLK时钟源

}

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);    //打开APB2总线上的GPIOA时钟

}

设置各GPIO端口功能  GPIO_Configuration

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

//设置GPIOA.2和GPIOA.3为推挽输出,最大翻转频率为50MHz

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init(GPIOA,&GPIO_InitStructure);

}

下一篇博客写本篇代码使用到的库函数。

猜你喜欢

转载自blog.csdn.net/niuyuce/article/details/84989267
今日推荐