Proteus和Keils程式下載下傳(百度網盤)
連結:https://pan.baidu.com/s/16d4WXDRUduuw7KPAu1_-mQ
提取碼:nbxy
(有一說一,CSDN上傳資源就算本來下載下傳積分設成0,也會自己調高,真的難受,還是放連結了)
stm32之定時器(按秒閃爍的LED燈)
proteus仿真圖
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;//主函數的傳回