stm32f103 LED灯简单程序实现

(基于奋斗stm32_v5开发板)

1.创建工程之配置库文件

stm32f103 LED灯简单程序实现_第1张图片

2.编写main.c代码

#include"stm32f10x.h"

#define ON           1
#define OFF          0

#define DELAY_TIME   0x3FFFFF

enum 
{
  LED1 = 0,
	LED2,
	LED3,
	MAX_LED,
};

typedef struct led_gpio_s
{
	int                 num;    /* LED编号 */
	GPIO_TypeDef        *group; /* LED使用的GPIO在哪一组: GPIOB or GPIOD */	
  uint16_t            pin;    /* LED使用的GPIO组中的那一个pin: GPIO_Pin_x */
} led_gpio_t;


led_gpio_t        leds_gpio[MAX_LED] =
{
		{LED1, GPIOB, GPIO_Pin_5}, /* LED1 用的GPB5 */
		{LED2, GPIOD, GPIO_Pin_6}, /* LED2 用的GPD6 */
		{LED3, GPIOD, GPIO_Pin_3}, /* LED3 用的GPD3 */		
};


void init_led_gpio(void)
{
	int                i;
	GPIO_InitTypeDef   GPIO_InitStructure;

	/* 使能PB和PD组 GPIO的时钟 */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD , ENABLE);	
	
	/*设置 PB5(LED1), PD6(LED2), PD3(LED3)为 GPIO 输出推免模式,口线翻转速度为50MHz */
	for(i=0; i MAX_LED )
		 return;
	 
	 if(OFF == cmd)
		 GPIO_ResetBits(leds_gpio[which].group, leds_gpio[which].pin);
	 else
		 GPIO_SetBits(leds_gpio[which].group, leds_gpio[which].pin);
}

void Delay(__IO uint32_t nCount)
{
   for(; nCount != 0; nCount--) ;
}

int main(void)
{
	/* 初始化系统时钟 */
  SystemInit();
	
	/* 初始化各个LED的GPIO管脚 */
	init_led_gpio();

  while(1)
  {
		  /* 把LED1、LED2、LED3点亮 */
			turn_led(LED1, ON);
		  turn_led(LED2, ON);
			turn_led(LED3, ON);
		  Delay(DELAY_TIME);

		  /* 把LED1、LED2、LED3灭掉 */		
			turn_led(LED2, OFF);
		  turn_led(LED1, OFF);
			turn_led(LED3, OFF);
		  Delay(DELAY_TIME);
  }
}
(进行相关设置并编译)

3.配置J-LINK调试

开发板连接:

stm32f103 LED灯简单程序实现_第2张图片

调试:

stm32f103 LED灯简单程序实现_第3张图片

stm32f103 LED灯简单程序实现_第4张图片

4.LED灯闪烁现象(效果:三灯以一定频率闪烁)

stm32f103 LED灯简单程序实现_第5张图片

5.出现问题排除

(一)

stm32f103 LED灯简单程序实现_第6张图片

解决方法:给开发板上电

(二)

stm32f103 LED灯简单程序实现_第7张图片


解决方法:

stm32f103 LED灯简单程序实现_第8张图片

排错前:下方空无一物

stm32f103 LED灯简单程序实现_第9张图片

排错后:

stm32f103 LED灯简单程序实现_第10张图片

你可能感兴趣的:(stm32f103 LED灯简单程序实现)