目录
第一步:初始化函数GPIO
void NVIC_Configure(void)
{
NVIC_InitTypeDef S;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
S.NVIC_IRQChannelSubPriority=1;
S.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&S);
}
void TIM3_Configure(void)
{
TIM_TimeBaseInitTypeDef T;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
T.TIM_Prescaler=(7200-1);
T.TIM_CounterMode=TIM_CounterMode_Up;
T.TIM_Period=1000;
TIM_TimeBaseInit(TIM3,&T);
TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_Trigger,ENABLE);
TIM_Cmd(TIM3,ENABLE);
}
void LED_Configure(void)
{
GPIO_InitTypeDef G;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
G.GPIO_Pin = GPIO_Pin_5;
G.GPIO_Speed = GPIO_Speed_50MHz;
G.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB,&G);
LED_Off();
}
void LED_On( void)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
void LED_Off( void)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
void LED_Trigger( void)
{
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)));
}
void delay_ms(int32_t ms)
{
int32_t i;
while(ms--)
{
i=7500;
while(i--);
}
}
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
{
LED_Trigger();
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
}
LED的开启与关闭
完整代码
这个是一个完整的函数,可以直接使用对应的引脚是正点的战舰版的引脚,自己也可以的更改
#include <stm32f10x.h>
void LED_Off( void);
void NVIC_Configure(void)
{
NVIC_InitTypeDef S;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
S.NVIC_IRQChannelSubPriority=1;
S.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&S);
}
void TIM3_Configure(void)
{
TIM_TimeBaseInitTypeDef T;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
T.TIM_Prescaler=(7200-1);
T.TIM_CounterMode=TIM_CounterMode_Up;
T.TIM_Period=1000;
TIM_TimeBaseInit(TIM3,&T);
TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_Trigger,ENABLE);
TIM_Cmd(TIM3,ENABLE);
}
void LED_Configure(void)
{
GPIO_InitTypeDef G;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
G.GPIO_Pin = GPIO_Pin_5;
G.GPIO_Speed = GPIO_Speed_50MHz;
G.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB,&G);
LED_Off();
}
void LED_On( void)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
void LED_Off( void)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
void LED_Trigger( void)
{
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)));
}
void delay_ms(int32_t ms)
{
int32_t i;
while(ms--)
{
i=7500;
while(i--);
}
}
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
{
LED_Trigger();
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
}
int main(void)
{
uint8_t k;
//³õʼ»¯
NVIC_Configure();
LED_Configure();
TIM3_Configure();
for(k=0;k<5;k++)
{
LED_On();
delay_ms(300);
LED_Off();
delay_ms(300);
}
//ÆäËû³ÌÐò
while(1)
{
}
}
主函数的书写,我这这里用到了定时器的中断,所以看起来稍微复杂了一点