stm32的外设初始化步骤,以定时器为例。

我这个程序的目的在于让定时器开启更新中断,实现定时器1S中断一次然后在中断函数中LED电平翻转一次。

1.首先先开启这个外设的时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);  //开启定时器1 的时钟APB2

2.定义这个外设的初始化结构体:TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;   //定时器模式初始化结构体  定义别名为TIM_TimeBaseInitStructure

3.把这个结构体内成员参数设置:

       TIM_TimeBaseInitStructure.TIM_Period = 9999; //自动重装载值   0-9999   大概为1s翻转电平 周期为2s
TIM_TimeBaseInitStructure.TIM_Prescaler=7199;  //定时器分频  72M/7200=10000hz
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;     //滤波器的分频因子

4.调用这个外设的初始化函数:TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);

5.允许定时器1中断开启:TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE ); //使能指定的TIM1中断,允许更新中断

6.外设的使能开启:TIM_Cmd(TIM1, ENABLE);  //使能TIM1

7.因为这个是定时器的中断所以还需设置中断优先级。抢占以及响应优先级的设置。NVIC。每个中断都需设置一个。

//中断优先级NVIC设置
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;  //TIM1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器

8.整个系统的设置中断分组,只需设置一次:一般在main函数中调用一次就OK。

       NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

9.编写中断服务函数:   void TIM1_UP_IRQHandler(void)   //TIM1中断

留此为证。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值