|
#include "stm32f10x.h"
//#include"stm32f10x_gpio.h"
#define RCC_GPIO_LED RCC_APB2Periph_GPIOF
#define GPIO_LED_PORT GPIOF
#define GPIO_LED1 GPIO_Pin_6
#define GPIO_LED2 GPIO_Pin_7
#define GPIO_LED3 GPIO_Pin_8
#define GPIO_LED4 GPIO_Pin_9
#define GPIO_LED_ALL GPIO_LED1 |GPIO_LED2 |GPIO_LED3 |GPIO_LED4
void LED_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIOB, GPIOC and AFIO clock */
RCC_APB2PeriphClockCmd(RCC_GPIO_LED | RCC_APB2Periph_AFIO , ENABLE); //RCC_APB2Periph_AFIO
/* LEDs pins configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_LED_ALL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIO_LED_PORT, &GPIO_InitStructure);
}
void Led_Turn_off_all(u8 n)
{
switch(n)
{
case 0:
GPIO_SetBits(GPIOF,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_6);
break;
case 1:
GPIO_SetBits(GPIOF,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_7);
break;
case 2:
GPIO_SetBits(GPIOF,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_8);
break;
case 3:
GPIO_SetBits(GPIOF,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);
break;
}
}
void Led_Turn_on_all(u8 n)
{
switch(n)
{
case 0:
GPIO_ResetBits(GPIOF,GPIO_Pin_6);
break;
case 1:
GPIO_ResetBits(GPIOF,GPIO_Pin_7);
break;
case 2:
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
break;
case 3:
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
break;
}
}
void LED_Spark(void)
{
static __IO uint32_t TimingDelayLocal = 0;
static __IO u8 n = 0;
if (TimingDelayLocal != 0x00) //如果不为0
{
if(TimingDelayLocal < 50) // 后50次熄灭LED指示灯
{
Led_Turn_off_all(n);
}
else // 前50次点亮LED指示灯
{
Led_Turn_on_all(n);
}
TimingDelayLocal--; // 该函数每一次被调用静态本地变量TimingDelayLocal便会减一
}
else
{
TimingDelayLocal = 100;
n++;
if (n>3) n=0;
}
}
/*******************************************************************************
* 函数名 : SysTick_Configuration
* 功能 : 配置SysTick 时基
* 输入 : 无
* 输出 : 无
* 返回 : 无
*******************************************************************************/
void SysTick_Configuration(void)
{
/* Setup SysTick Timer for 10 msec interrupts */
//时间计算就是 SystemCoreClock/(SystemCoreClock/50)
if (SysTick_Config(SystemCoreClock / 100)) //SysTick配置函数,传递的参数是初值 1/100S
{
/* Vector error */
while (1);
}
/* Configure the SysTick handler priority */
NVIC_SetPriority(SysTick_IRQn, 0x0);//SysTick中断优先级设置
}
void InterruptConfig(void)
{
/* Set the Vector Table base address at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00000);
}
int main(void)
{
LED_config(); //LED使用的GPIO初始化
Led_Turn_on_all(4); //点亮所有的LED灯
SysTick_Configuration(); //SysTick中断配置
/*主循环 */
while (1)
{
;
}
} |
|