基本定时器TIM6和TIM7包括一个由可编程分频器驱动的16位自动重载计数器。它可以用作普通的定时器,也可以用来驱动DAC。这两个定时器是完全独立的,不共享任何资源。更多时候是与DAC平配合使用。
作为定时器的配置步骤:
1.设置中断优先级分组(如果之前没有设置),这个最好一个程序里只在开头设置一次。
2.使能相关时钟。
3.设置分频。
4.清空计数器的值。
5.设置自动重装寄存器的值。
6.是否允许中断。
7.如果允许中断,设置中断优先级,使能中断。
8.使能计数器。
程序:
/************************************
标题:定时器TIM7的定时练习
软件平台:IAR for ARM6.21
硬件平台:stm32f4-discovery
主频:168M
author:小船
data:2012-02-06
*************************************/
#include
#include "MyDebugger.h"
void main ()
{
SCB->AIRCR = 0x05FA0000 | 0x400; //中断优先级分组 抢占:响应=3:1
RCC->APB1ENR |= (1<<5); //打开TIM7时钟
TIM7->PSC = 8399; //对时钟84M进行8400分频,使得计数频率为10k
TIM7->ARR = 10000; //定时一秒
TIM7->CNT = 0; //清空计数器
TIM7->CR1 |= (1<<7); //自动重装载预装载使能
TIM7->DIER |= 1; //使能中断
NVIC->IP[55] = 0x80;
NVIC->ISER[1] |= (1<<(55-32));
TIM7->CR1 |= 1; //开始计时
MyDebugger_Init();
while(1)
{
};
}
void TIM7_IRQHandler(void)
{
if(TIM7->SR)
{
MyDebugger_LEDs(blue, turn);
TIM7->SR &= ~(0x0001);
}
}
关键字:stm32f407 基本定时器 操作寄存器
引用地址:
stm32f407之基本定时器TIM6&TIM7(操作寄存器)
推荐阅读最新更新时间:2024-03-16 16:07
stm32f407 adc的dma中断方式
#include adc.h /* 数据定义 */ u8 UpdataTIM = 0; //更新TIM2定时器标志 u16 CurrentFreq = 500;//默认市电频率,单位为0.1hz ADBASE_TYPE uAD_Buff_A ; //ADC采集缓存A ADBASE_TYPE uAD_Buff_B ; //ADC采集缓存B //考虑到可能出现的数据处理时间较长的问题,临时添加缓存 //u16 uAD_IN_BUFF ; ADBASE_TYPE *CurrentBuffPtr = NULL; //当前缓存指针 /* * Function : static void ADCInit_GPIO(
[单片机]
STM8 8位基本定时器(TIM4,TIM6)
介绍 该定时器由的8可位自动重载的向上计数器所组成,它可以用来作为时基发生器,具有溢出中断功能。 TIM6同时钟信号控制器用于定时器同步和级联。 STM8通用定时器TIM4的主要功能 TIM4功能包括: 8位向上计数的自动重载计数器; 3位可编程的预分配器(可在运行中修改),提供1,2,4,8,16,32,64和128这8种分频比例。 中断产生 –在计数器更新时:计数器溢出 STM8通用定时器TIM6主要功能 TIM6的功能包括: 8位向上计数的自动重载计数器; 3位可编程的预分配器(可在运行中修改),提供1,2,4,8,16,32,64和128这8种分频比例。 用于和外部信号相连和定时器
[单片机]
再次调试STM32F407+DP83848
早在还没有毕业前,就调试过STM32F407+DP83848,这次又调试了一次,居然花了2天时间。STM32支持两种工业级标准的接口,来与外部物理层 PHY模块相连,分别是独立于介质的接口(MII)和简化的独立于接口的接口(RMII)。之前PHY芯片使用的MII模式,现在的这次调试是使用的RMII模式(参考了各方原理图,主要还是以官方开发板的MB786为主)。我还是以一个ST官方手册上的图来说说我的使用情况吧。 1.如果我们按照这个图上来画原理图,这个肯定没有错,但是对于一般使用(我们用的都是全双工的),CRS和COL这两根线使用的不多,至于为什么,我也说的不是很清楚,了解的同学们,可以补充下。 2.对于连接 DP83
[单片机]
STM32F103与STM32F407的SPI调试笔记
在写入SPI数据数,必须调用 SPI_I2S_ReceiveData(SPI1);读取一次,不然会对数据的读取不正确 u8 SPI_Flash_GetChar(void){ u8 Data = 0; Data = SPI_I2S_ReceiveData(SPI1);//必须读取一次,应该是读后清空寄存器 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); //SPI_I2S_ClearITPendingBit(SPI1,SPI_I2S_FLAG_TXE); SPI_I2S_SendData(SPI1, 0xff); while (S
[单片机]
STM32F407输出多路PWM波
主控,淘宝黑色STM32F407板子 编译器 IAR 目标要求 输出四路PWM波 这里把写好的H和C文件给大家了,只需要在main里面简单的调用一下函数即可实现四路PWM的输出 在main里面加入 PWM_Init(); Updata_PWM_(20,200,500,600); //即可得到2%,20%,50%,60%的PWM波 #include PWM.h // 输出四路PWM波 //----------------------------2016/11/26--陈勃瑄 // void PWM_Init(void) // void Updata_PWM_(float DC1,float DC2,float D
[单片机]
基于Stm32F407的步进电机的速度控制方案------初步
这里跟大家分享一下我的步进电机的速度控制思路(最终初步解决了问题) 这里我选择的是 Stm32F407 作为主控芯片,我的大致速度控制思路就是通过调整PSC 和ARR的值来实现对速度的控制。对应于我的代码的定时器框图如下(我用的是TIM14) 为了实现修改定时器的频率我们需要修改对应的PSC和ARR的值、 这里的定时器模式我选择是PWM模式 对应的定时器部分的初始化代码如下 以上代码完成了定时器的IO复用和对应的时钟的初始化,这里我们不在赘述! 我们接下来就是需要通过修改 定时器对应的PSC和ARR值来实现对定时器输出的脉冲的频率进行调整 所以我考虑的是 我们写一个数组,将不同的转速下对应的PSC和ARR值都分
[单片机]
stm32 窗口看门狗[操作寄存器+库函数]
stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。 独立看门狗是限制喂狗时间在0-x内,x由你的相关寄存器决定。喂狗的时间不能过晚。 窗口看门狗,所以称之为窗口就是因为其喂狗时间是一个有上下限的范围内,你可以通过设定相关寄存器,设定其上限时间和下限时间。喂狗的时间不能过早也不能过晚。 窗口看门狗的上窗口就是配置寄存器WWDG- CFR里设定的W ,下窗口是固定的0x40;当窗口看门狗的计数器在上窗口值之外,或是低于下窗口值都会产生复位。 上窗口的值可以只有设定,7位二进制数最大只可以设定为127,最小又必须大于下窗口的0x40,所以其取值范围为40~127; 窗口看门狗的
[单片机]
基于STM32F407的官方版UCOS III源码,增加了FPU浮点支持
基于CORTEX-M4的STM32F407最大的特色就是加入了一个FPU浮点处理器,能支持DSP运算。但是UCOS III官方的移植版本竟然不支持FPU浮点运算,如果在MDK的设置选项中把使能FPU打上的话运行的时候会把芯片带到硬fault,我用STLINK逐步跟踪,发现在使能FPU后系统在进行任务堆栈切换的时候发生错误进入硬fault,遂在GOOGLE上搜索了半天,并查看了M4的参考手册,发现使能FPU之后系统在进入中断的时候会自动将部分FPU寄存器入栈,而不支持FPU的UCOS移植版本显然没有为FPU寄存器做堆栈设置,所以在堆栈进行还原的时候导致还原点不同,进入硬fault。下面逐一分析: 1. 在UCOS III for S
[单片机]