打印
[STM32F1]

STM32定时器TIM3程序

[复制链接]
1199|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mintspring|  楼主 | 2016-12-2 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
//STM32开发板实验8
//定时器中断实验  
       
int main(void)
{               

        delay_init();                     //延时函数初始化          
        NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
//        uart_init(9600);         //串口初始化为9600
        LED_Init();                             //LED端口初始化
        TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms  
           while(1)
        {
                LED0=!LED0;
                delay_ms(200);                  
        }         
}         

重点分析:        TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms  

void TIM3_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
       
        //定时器TIM3初始化
        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值       
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位

        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断

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


        TIM_Cmd(TIM3, ENABLE);  //使能TIMx                                         
}

//定时器3中断服务程序
void TIM3_IRQHandler(void)   //TIM3中断
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
                {
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志
                LED1=!LED1;
                }
}

沙发
mintspring|  楼主 | 2016-12-2 21:29 | 只看该作者
实验8 定时器中断实验.rar (273.1 KB)



使用特权

评论回复
板凳
阿顺5657| | 2016-12-3 14:09 | 只看该作者
都是自己写的吗?好次哟一。。

使用特权

评论回复
地板
mintspring|  楼主 | 2016-12-3 14:11 | 只看该作者
阿顺5657 发表于 2016-12-3 14:09
都是自己写的吗?好次哟一。。

哈哈,水平烂。没法。。

使用特权

评论回复
5
sgb6688756| | 2016-12-8 22:44 | 只看该作者
哈哈哈。同是新手。谢谢分享

使用特权

评论回复
6
mintspring|  楼主 | 2016-12-10 20:06 | 只看该作者
这是用之前的标准库写的,如果用新版的HAL库可移植能力更好。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

283

主题

4818

帖子

24

粉丝