• 定时器中断实验


    通用定时器

     

    APB1默认为36M,36*2=72M,

    计数器是0~65535

     

    两个AHB/APB桥在AHB2APB总线间提供同步连接。 APB1操作速度限于36MHzAPB2
    作于全速(最高72MHz)
    注意: 当对APB寄存器进行8位或者16位访问时,该访问会被自动转换成32位的访问:桥会自动将8
    或者32位的数据扩展以配合32位的向量。
    程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。

    下面的例子说明如何映射别名区中SRAM地址为0x20000300的字节中的位216进制的计算
    0x22006008 = 0x22000000 + (0x300× 32) + (2× 4).
    0x22006008地址的写操作与对SRAM中地址0x20000300字节的位2执行读--写操作有着相
    同的效果

    128 256  512 1024

    一个输入通道可以给两个捕获通道

     时钟分频是设置采样滤波的

    重复计数器是高级定时器需要设置的

    分频系数会自动加一,为36000,不能超过65535

    500ms=1000*36000/72M

    读取状态标志位以及清除中断标志位,函数分别为TIM_GetFlagStatus和TIM_ClearFlag

     time.c

    #include "time.h"
    #include "led.h"

    void TIM4_Init(u16 pre,u16 psc)
    {
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//结构体初始化
    NVIC_InitTypeDef NVIC_InitStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟

    TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//定时器预分频器
    TIM_TimeBaseInitStructure.TIM_Period=pre; //定时器周期
    TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//技术模式
    TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频
    TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);

    TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
    TIM_ClearITPendingBit(TIM4,TIM_IT_Update);//清除标志

    NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占式优先级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=3; //响应优先级,0到3选择
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中断通道
    NVIC_Init(&NVIC_InitStructure);

    TIM_Cmd(TIM4,ENABLE);

    }

    void TIM4_IRQHandler(void)
    {
    if(TIM_GetITStatus(TIM4,TIM_IT_Update)==1)
    {
    led2=!led2;
    }
    TIM_ClearITPendingBit(TIM4,TIM_IT_Update);//清除标志
    }

     总结:1.TIM4初始化函数,定义变量

                2.TIM和NVIC结构体初始化

                3.使能TIM4时钟,挂接在APB1上

                4.定时器预分频器,周期,技术模式,时钟分频,初始变量及结构地址

               5.TIM_ITConfig,清除标志

               6.NVIC的设置, TIM_Cmd(TIM4,ENABLE);

               7.TIM4_IRQHandler函数,if语句判断状态if(TIM_GetITStatus(TIM4,TIM_IT_Update)==1)

               8.清除标志,TIM_ClearITPendingBit(TIM4,TIM_IT_Update);

     time.h

    #ifndef _time_H
    #define _time_H

    #include "system.h"

    void TIM4_Init(u16 pre,u16 psc);

    #endif

    总结:注意包含头文件#include "system.h",初始化函数

    main.c

    #include "system.h"
    #include "led.h"
    #include "SysTick.h"
    #include "time.h"

    int main()
    {
    u8 i=0;
    SysTick_Init(72);//72M
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    LED_Init();//初始化
    TIM4_Init(1000,36000-1);//500ms定时器时间

    while(1) //可以检测是否死机
    {
    i++;
    if(i%20==0)
    {
    led1=!led1; //led1不断闪烁
    }
    delay_ms(10);
    }
    }

     

  • 相关阅读:
    关于celery踩坑
    关于git的分批提交pull requests流程
    SymGAN—Exploiting Images for Video Recognition: Heterogeneous Feature Augmentation via Symmetric Adversarial Learning学习笔记
    AFN—Larger Norm More Transferable: An Adaptive Feature Norm Approach for Unsupervised Domain Adaptation学习笔记
    Learning to Transfer Examples for Partial Domain Adaptation学习笔记
    Partial Adversarial Domain Adaptation学习笔记
    Partial Transfer Learning with Selective Adversarial Networks学习笔记
    Importance Weighted Adversarial Nets for Partial Domain Adaptation学习笔记
    Exploiting Images for Video Recognition with Hierarchical Generative Adversarial Networks学习笔记
    improved open set domain adaptation with backpropagation 学习笔记
  • 原文地址:https://www.cnblogs.com/296389183yy/p/9370730.html
Copyright © 2020-2023  润新知