根据教材上的代码,自己写了一下循环流水灯的代码,亮灯顺序应该是:红、绿、蓝、红、蓝、绿、紫、黄、白、青、黑,但是烧到开发板上后,是先亮了白、青、蓝、红、蓝、绿、紫、黄、白、青、黑,然后才正式的循环的,问了一个学长,说是时钟配置的问题,但是自己看了又不知道是什么问题,亮单个灯的时候是正常的,以下是代码:
main.c的代码:
#include "stm32f10x.h"
#include "bsp_led.h"
#define SOFT_DELAY Delay(0xFFFFFF);
void Delay(nCount)
{
for (; nCount !=0;nCount--);
}
int main(void)
{
LED_GPIO_Config();
while(1)
{
LED1_ON;//red
SOFT_DELAY;
LED1_OFF;
LED2_ON;//green
SOFT_DELAY;
LED2_OFF;
LED3_ON;//blue
SOFT_DELAY;
LED3_OFF;
LED_RED;
SOFT_DELAY;
LED_BLUE;
SOFT_DELAY;
LED_GREEN;
SOFT_DELAY;
LED_PURPLE;
SOFT_DELAY;
LED_YELLOW;
SOFT_DELAY;
LED_WHITE;
SOFT_DELAY;
LED_CYAN;
SOFT_DELAY;
LED_RGBOFF;
SOFT_DELAY;
}
}
bsp_led.c的代码:
#include "bsp_led.h"
#include "stm32f10x.h"
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(LED1_GPIO_CLK|LED2_GPIO_CLK|LED3_GPIO_CLK,ENABLE);
GPIO_InitStructure.GPIO_Pin=LED1_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=LED2_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=LED3_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);
} |