天天看点

STM32(stm32f401xx)开发之定时器(按秒闪烁的LED灯)Proteus和Keils程序下载(百度网盘)stm32之定时器(按秒闪烁的LED灯)

Proteus和Keils程序下载(百度网盘)

链接:https://pan.baidu.com/s/16d4WXDRUduuw7KPAu1_-mQ

提取码:nbxy

(有一说一,CSDN上传资源就算本来下载积分设成0,也会自己调高,真的难受,还是放链接了)

stm32之定时器(按秒闪烁的LED灯)

proteus仿真图

STM32(stm32f401xx)开发之定时器(按秒闪烁的LED灯)Proteus和Keils程序下载(百度网盘)stm32之定时器(按秒闪烁的LED灯)

keil程序

#include <stdio.h>//单片机工程可以不用

#include <stm32f4xx.h>//这个头文件一定要包含 ---这个头文件官方帮我们定义好了所有寄存器的地址



void LED_Init(void)
{
	GPIO_InitTypeDef  aaa;//定义一个结构体变量
	//1、使能指定的GPIO模块时钟--默认复位后开机时钟不会全部提供给各个模块 使用时需要自己开启
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);	
	
	//2、初始化引脚
	aaa.GPIO_Pin = GPIO_Pin_0;//引脚号选择  PA0  也要按照官方的填法  怎么填 去头文件 stm32f4xx_gpio.h
	aaa.GPIO_Mode = GPIO_Mode_OUT;//输出模式
	aaa.GPIO_OType =  GPIO_OType_PP;//推挽输出
	aaa.GPIO_Speed = GPIO_High_Speed;//高速
	GPIO_Init(GPIOA,&aaa);//&
}


void TIM2_init(void)
{
	TIM_TimeBaseInitTypeDef  aaa;

	//1、使能对应模块的时钟 TIM2
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	//2、初始化定时器
	aaa.TIM_Prescaler = 8400;//定时1s  1<= 8400 <=65536   84Mhz/8400 = 10000hz  T=1/10000s =0.1ms 
	aaa.TIM_Period    = 10000;//定时时间t = T*n = 0.1ms *10000 = 1s
	aaa.TIM_CounterMode = TIM_CounterMode_Up;//选择递增模式
	aaa.TIM_ClockDivision = TIM_CKD_DIV1 ;//1分频 1  2  4
	
	TIM_TimeBaseInit(TIM2,&aaa);
	
    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//使能TIM2的更新中断
    TIM_Cmd(TIM2,ENABLE);//使能TIM2

}

void NVIC_INIT(void)
{
	NVIC_InitTypeDef  ccc;
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组  2分组
	
	ccc.NVIC_IRQChannel = TIM2_IRQn;
	ccc.NVIC_IRQChannelCmd = ENABLE;
	ccc.NVIC_IRQChannelPreemptionPriority = 0;
	ccc.NVIC_IRQChannelSubPriority = 0;
	
	NVIC_Init(&ccc);
}



void TIM2_IRQHandler(void) 
{
        TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除溢出中断标志位
		GPIO_ToggleBits(GPIOA,GPIO_Pin_0);

}


int main()
{

	
	LED_Init();//初始化LED
	
	GPIO_WriteBit(GPIOA, GPIO_Pin_0, 0);
	
    TIM2_init();
	
	NVIC_INIT();
	
	
	//主循环(死循环)
	while(1)//卡住
	{
		
	}
	return 0;//主函数的返回