天天看點

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;//主函數的傳回