| 编辑推荐: | 
                                   
                                   
                                     
                                      本文介绍了基于STM32F103入门,如何点亮LED灯相关内容。希望对你的学习有帮助。   
                                      本文来自于CSDN,由火龙果软件Linda编辑、推荐。 | 
                                   
                                  | 
                             
                           
                           
                          1:新建固件库工程文件 
                           
                            1.1:找到一个固件库模板  
						    
						   1.2:打开KEIL5新建工程 
                            
						     
						      
							   
							    
                          
                            最终效果: 
							   
							 1.3:添加相关文件 
                            然后我们针对不同文件夹 我们添加不同的文件进来。 
                            双击STARTUP 添加我们固件库的启动文件 
							   
							 
                            STARTUP:添加Libraries——>CMSIS——>startup中的启动文件USER:添加固件库的User文件夹中的.c文件 
                            CMSIS 添加Libraries——>CMSIS文件夹中的.c文件 
                            DOC:添加固件库中Doc文件夹的readme.txt 
                            FWLIB:添加Libraries——>STM32F10x_StdPeriph_Driver文件夹中的.c文件 
                            添加完效果 
							   
							1.4:手动添加其他文件路径进来 
                            打开stm32f0x.h文件 
							   
							 按 Ctrl + F 查找 stm32f10x_conf 
                            会调到一下的代码 我们得宏定义加载一下 
							   
							 
							   
							 添加其他文件夹.h路径 
							 
							   
							 
                            这样就是新建固件库工程文件完成了。。。。。 
                            下面就开始点灯 点灯 点灯 
                            下面就开始点灯 点灯 点灯 
                            下面就开始点灯 点灯 点灯 
                             2:STM32固件库点灯 
                            首先你得有个固件库手册来参考 我这里直接上代码。 
							
							   
							 
                            我这个用的STM32C8T6板子 PC13是LED灯 根据原理图 给个低电平则点亮 
                            LED配置代码 
                            led.c 
                            
                               
                                  #include "stm32f10x.h"
#include "led.h"
void LED_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	
	
	GPIO_InitTypeDef led_init;
	led_init.GPIO_Pin   = GPIO_Pin_13;      
	led_init.GPIO_Mode  = GPIO_Mode_Out_PP; 
	led_init.GPIO_Speed = GPIO_Speed_10MHz; 
	
	
	GPIO_Init(GPIOC, &led_init);
}
 
  |   
                             
                          
                            led.h 
                            
                               #ifndef _LED_H_
#define _LED_H_
#include "stm32f10x.h"
void LED_Init(void); 
#endif
 
  |   
                             2.1: 方式1点灯 
                            main.c 
                            
                               
                                  #include "stm32f10x.h"
#include "led.h"
int  main()
{LED_Init(); 
	
	while(1)
	{
		
		GPIO_ResetBits(GPIOC, GPIO_Pin_13); 	
	}   
}
 
  |   
                             2.2 :方式2点灯 
                            main.c 
                            
                               
                                  #include "stm32f10x.h"
#include "led.h"
int  main()
{LED_Init(); 
	
	while(1)
	{
		
		GPIO_WriteBit(GPIOC,GPIO_Pin_13, Bit_RESET); 
	}   
}
 
                                  |   
                             2.3 :方式3点灯 
                            main.c 
                            
                               
                                  #include "stm32f10x.h"
#include "led.h"
int  main()
{LED_Init(); 
	
	while(1)
	{
		
		GPIO_Write(GPIOC, 0X0000); 		
	}   
}
 
  |   
                            
                           
                            点灯效果 
							   
							  3:STM32闪烁灯 
                            加一个延时函数 我们就可以做一个 LED闪烁效果了 
                            这里的延时我们没有用到定时器 ,只是简单的通过循环来延时。 
                            delay.c 
                            
                               
                                  #include "stm32f10x.h"
#include "delay.h"
void delay_ms(uint16_t time)
{uint16_t i = 0;
	while(time--)
	{
		i = 10000;
		while(i--);
	}
}
 
  |   
                            main.c 
                            
                               
                                  #include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int  main()
{LED_Init(); 
	
	while(1)
	{GPIO_ResetBits(GPIOC, GPIO_Pin_13); 	
		delay_ms(1000); 
		GPIO_SetBits(GPIOC,GPIO_Pin_13);		
		delay_ms(1000); 
	}   
}
 
  |   
                            
                           
                            闪烁灯效果     4:STM32呼吸灯 
                            呼吸灯就像我们人呼吸那样,我们可以让灯慢慢的亮 慢慢的暗,这个就是通过占空比来调节。(可以理解为LED高电平时间和LED低电平时间) 
                            比如 LED 亮延时100us 然后 暗 100us 这时候他们占空比是百分之50. 
                            那如果我们 LED 亮10us 然后暗 还是100us 这个时候 你会发现 LED灯变暗了很多。 这个其实是我们的视觉暂停 
                            原因导致的。 
                            所以我们可以通过调节 LED点亮的时间 和 LED 熄灭的时间的比例来调节,让LED 慢慢的亮 然后 
                            慢慢的 暗。 
                            慢慢的亮 意思就是 LED的低电平时间慢慢的增加。 
                            比如从1us 慢慢 到500us 然后LED高电平时间则是 从500us 慢慢到1us。 
                            如果是想着LED灯 亮慢慢 暗 则相反。 
                            main.c 
                            
                               
                                  #include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int  main()
{LED_Init(); 
	unsigned char i = 0;
	unsigned int t = 1;
	unsigned char flag = 1;
	while(1)
	{if(flag == 1) 
		{for(i=0;i<10;i++)
			{GPIO_ResetBits(GPIOC, GPIO_Pin_13); 	
				delay_us(t);
				GPIO_SetBits(GPIOC,GPIO_Pin_13);		
				delay_us(501-t);
			}
			t++;	
			if(t == 500)
			{
				flag = 0;
			}
		}
		if(flag == 0) 
		{for(i=0;i<10;i++)
			{GPIO_ResetBits(GPIOC, GPIO_Pin_13); 	
				delay_us(t);
				GPIO_SetBits(GPIOC,GPIO_Pin_13);		
				delay_us(501-t);
			}
			t--;
			if(t == 1)
			{
				flag = 1;
			}
		}
	} 
}
 
  |   
                            
                           
                            呼吸灯效果     5:STM32按键点灯 
                            我们玩了呼吸灯 也可以玩玩按键点灯,按键其实也是挺简单的,我用的按键是只有两个引脚的,我们任意的一脚接单片机的GND 
                            ,另一个接单片机的GPIO 当按下按键 这个GPIO则会是低电平。 那我们就检测这个GPIO是否是低电平 
                            如果是 我们则点亮LED灯。 
                            key.c 
                            
                               
                                  #include "stm32f10x.h"
#include "key.h"
void KEY_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	
	GPIO_InitTypeDef key_init;
	key_init.GPIO_Pin   = GPIO_Pin_5;      	
	key_init.GPIO_Mode  = GPIO_Mode_IPU; 	
	
	
	
	GPIO_Init(GPIOA, &key_init);
}
 
  |   
                             
                          
                            main.c 
                            
                               
                                  #include "stm32f10x.h"
#include "led.h"
#include "key.h"
#include "delay.h"
int  main()
{LED_Init(); 
	KEY_Init(); 
	GPIO_SetBits(GPIOC,GPIO_Pin_13);	
	GPIO_SetBits(GPIOA,GPIO_Pin_5);		
	
	while(1)
	{
		if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) == 0) 	
		{delay_ms(20); 
				if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) == 0)
				{GPIO_ResetBits(GPIOC, GPIO_Pin_13); 	
					delay_ms(1000); 
				}
		}
		else
		{
				GPIO_SetBits(GPIOC,GPIO_Pin_13);		
		}
	} 
}
 
  |   
                            
                          
                            按键点灯效果 
                            
                           6:STM32震动感应灯 
                               需要材料: 
                            1.震动传感器
							  
 
							2.继电器 
                            (我用的这个是高电平导通)
							  
 
							3.灯 
                            这种是震动传感器,我们可以也通过震动来点灯,我用的这个模块是当发生震动时,会变成低电平。那其实就是相当于我们的按键,我们去检测一下这个模块到底是不是低电平如果是低电平,那么我们让LED灯点亮1秒啥的都有可以。 
                            直接上代码: 
                            配置震动传感器模块代码 
                               代码 
                            shake.c 
                            
                               
                                  #include "stm32f10x.h"
#include "shake.h"
void SHAKE_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	
	GPIO_InitTypeDef shake_init;
	shake_init.GPIO_Mode  = GPIO_Mode_IPU; 	
	shake_init.GPIO_Pin   = GPIO_Pin_3;		
	
	
	
	GPIO_Init(GPIOA, &shake_init);		
}
 
  |   
                            
                          
                            继电器模块配置代码: 
                            relay.c 
                            
                               
                                  #include "relay.h"
void RELAY_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef relay_init;
	relay_init.GPIO_Mode  = GPIO_Mode_Out_PP; 	
	relay_init.GPIO_Pin   = GPIO_Pin_4;			
	relay_init.GPIO_Speed = GPIO_Speed_50MHz;
	
	
	GPIO_Init(GPIOA, &relay_init);
}
 
  |   
                            
                          
                            main.c 
                            
                               
                                  #include "stm32f10x.h"
#include "led.h"
#include "relay.h"
#include "delay.h"
#include "shake.h"
int  main()
{LED_Init();  
	RELAY_Init();
	SHAKE_Init();
	
	GPIO_SetBits(GPIOC, GPIO_Pin_13); 	
   	GPIO_SetBits(GPIOA, GPIO_Pin_3); 	
	GPIO_ResetBits(GPIOA, GPIO_Pin_4); 	
	while(1)
	{if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3) == 0)
		{GIO_ResetBits(GPIOC, GPIO_Pin_13); 
			GPIO_SetBits(GPIOA, GPIO_Pin_4); 	
			delay_ms(1000);
		}
		else
		{
			GPIO_SetBits(GPIOC, GPIO_Pin_13); 	
			GPIO_ResetBits(GPIOA, GPIO_Pin_4); 	
		}
			
	} 
}
 
  |   
                               如何接线 
							 
 
							
                              
                           
                            项目效果 
                            
						    
                              |