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;//主函数的返回