(基于奋斗stm32_v5开发板)
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; i++)
{
/*设置 PB5(LED1)为 GPIO 输出推免模式,口线翻转速度为50MHz */
GPIO_InitStructure.GPIO_Pin = leds_gpio[i].pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(leds_gpio[i].group, &GPIO_InitStructure);
}
}
void turn_led(int which, int cmd)
{
if(which<0 || which> 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调试
开发板连接:
调试:
4.LED灯闪烁现象(效果:三灯以一定频率闪烁)
5.出现问题排除
(一)
解决方法:给开发板上电
(二)
解决方法:
排错前:下方空无一物
排错后: