STM32F103的入门_点亮LED灯

本文基于原子例程及其模板

在学习stm32之前,有大多数人学过51单片机,51单片机中的IO口可以直接进行使用,可以读取高低电平,也可以控制高低电平。

 

大家看这个51的程序,只要将LED灯的负极接入电源负极,在灯正极串联200欧(经过发光二极管会有一个电压降低值,简称压降,一般为2V,51单片机输入高电平为5V,直接接入LED灯,会将灯烧掉,欧姆定律大家都知道,直接用电阻将这3V电压分走后,LED灯就能正常发光,R=U/I  I等于什么呢,LED一般电流为15ma,所以R= 3/15ma = 200欧)再接入51单片机的P0^0口,当51单片机给出高电平,也就是5V时,LED灯就会亮了

#include 
 
 
 sbit LED = P0^0;
 main()
{
while(1)
 {
LED = 1;
 }
}

但是在STM32中,使用的电压为3.3V,且每一个IO口所拥有的功能很多,这时我们需要正常输出高低电平,怎么办呢?

咱们对STM32的IO口进行一个初始化

void LED_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;  //这叫结构体,需要放最上面
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	  //打开GPIO A的端口时钟 
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				
 // 对GPIO口进行配置,这是你需要哪个就写哪个

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 
//设置GPIO的模式,这个GPIO_MODE_OUT_PP,OUT代表输出,PP代表推挽式

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //  这是GPIO口 速度 这时设置为50MHZ
 GPIO_Init(GPIOA, &GPIO_InitStructure);					 //  根据设定参数初始化GPIOA.8
 GPIO_SetBits(GPIOA,GPIO_Pin_8);						 //设置GPIOA.8输出高电平
}
 

这上面是对IO状态初始化的设置

咱现在就可以在主函数使用这个初始化

#include "sys.h"

void LED_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				 
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		
 GPIO_Init(GPIOA, &GPIO_InitStructure);					 
 GPIO_SetBits(GPIOA,GPIO_Pin_8);						 

}
 

main()
{
  LED_Init();
   while(1)
    {
         GPIO_ResetBits(GPIOA,GPIO_Pin_8);//这个就是将IO口设置为低电平就是0V
         delay_ms(300);  
     //  维持上面的状态300ms,因为咱们LED灯负极接电源负极,此时单片机输出0V,LED两端没有电压差值,所以LED灯不会亮

             GPIO_SetBits(GPIOA,GPIO_Pin_8);	//这个就是将IO口设置为高电平就是3.3V
                此时LED两端有电压差值,就会发亮
             delay_ms(300);  
    }


}


有人会问,while(1)这个函数是什么意思,计算机中的值只有真和假,0就是假,其他的都是真值,while函数,当函数后面的()里为真值时,运行下面大括号中的语句,此时()里一直为真值,所以一直循环运行大括号中的语句。

因为51单片机是5V供电,所以输出高电平也是5V,但是STM32单片机是3.3V供电,输出高电平也是3.3V,此时这时候LED灯正极该一个多大的电阻呢,这就给大家留个任务,算出这个组织,可以在下面评论出来,我看看是不是算对了

你可能感兴趣的:(32单片机)