STM32F407中定时器1和定时器5的触发关系 10C

我利用STM32F407控制电机,用TIM1输出互补对称的PWM波,利用TIM3读取
磁编码器的相对式位置,并用TIM3触发TIM5来进行数据记录。
现在遇到的情况是:
1、我用延时函数使得电机在不使用磁编码器的情况下缓慢旋转,然而当我的磁编码器远离电机时,电机发出了啸叫声(比较大的电流声),而磁编码器靠近电机磁铁的时候,啸叫声消失。
2、TIM1配置为SMCR = 0x00,也就是从模式被禁止; TIM5配置为从模式,TIM3配置为主模式;
3、当屏蔽掉TIM5的初始化或者TIM3的初始化,或者屏蔽掉两者的主从模式初始化,均能使啸叫声消失
查阅参考手册,发现TIM1的SMCR寄存器的TS位为0时,接受来自定时器5的触发。但是SMS位既然已经是0,说明从模式应该已经被禁止了;但实际上定时器又确实被定时器3或者5给影响了。请问这是怎么回事呢?

0

2个回答

0
Dantemiwa
Dantemiwa 请问能针对本问题回答一下么?这个链接的资料我都明白。
一年多之前 回复
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
STM32F407 定时器触发ADC-DMA采集
基于STM32F407的程序,实现了通过DMA方式进行ADC采样,并通过定时器定是触发。程序中使用了ADC3-channel0,1,2;通过定时器2触发。程序已在STM32F407开发板上验证。
stm32f407中定时器中断的问题
[code=c]#include "stm32f4xx.h"rnrn#define GPIO_Pin_6 0x0040rn#define GPIO_Pin_7 0x0080rn#define GPIO_Pin_8 0x0100rn#define GPIO_Pin_9 0x0200rn#define light_num 4rnrnvoid light_init(void);rnvoid interrupt(void);rnrnrnvoid light_init(void)rnrn rn RCC->AHB1ENR |= 0x00000020;rn rn GPIOF->MODER |= 0x00055000;rn rn GPIOF->OTYPER |= 0x000003C0;rn rn GPIOF->OSPEEDR |= 0x00055000;rn rn GPIOF->PUPDR &= 0xFFF00FFF;rn rn GPIOF->BSRRL |= GPIO_Pin_6;rn GPIOF->BSRRL |= GPIO_Pin_7;rn GPIOF->BSRRL |= GPIO_Pin_8;rn GPIOF->BSRRL |= GPIO_Pin_9;rnrnrnvoid interrupt(void)rnrn rn RCC->APB1ENR |= 0x00000008; rn rn TIM5->PSC = 4199; rn TIM5->ARR = 50000; rn rn //TIM5->CR1 |= 1<<2;rn rn TIM5->DIER |= 1;rn TIM5->DIER |= 1<<6;rn rn NVIC->IP[50] = 0x00; rn NVIC->ISER[1] |= (1<<18); rn TIM5->CR1 |= 1;rnrnrnint main()rnrn light_init();rn interrupt();rn while(1)rn ;rnrnrnvoid TIM5_IRQHandler(void)rnrn if(TIM5->SR&0x0001)rn GPIOF->BSRRH |= GPIO_Pin_6;rn rn TIM5->SR &= ~(0x0001);rn[/code]rnrn我这段程序中的目的是让灯隔5s闪亮一次。但是程序却没有起到延时的作用,从一开始TIM5->SR的第一位就被置为1了,请问我的错误处在哪里?rn再次拜过各位大神了
定时器在IAR下的STM32F407例程
用IAR编译器建立的STM32F407的定时器例程,有需要的朋友可以下载去借鉴借鉴,希望大家可以共同学习,进步!
STM32F407定时器编码器模式
#define LEFT_ENCODER        4 //左编码器对应TIM4 #define RIGHT_ENCODER       1 //右编码器对应TIM1 struct rt_semaphore encoder_sem; void encoder_left_Init(void) {     GPIO_InitTypeDef         GPIO_InitStr
STM32F407定时器TIM1中断
STM32F407定时器TIM1中断
STM32F407的定时器时钟频率
//实验的思路为对TIM3进行初始化后,进入死循环等到TIM3的溢出中断,当TIM3_CNT的值等于TIM3_ARR时, 就会产生TIM3的中断,进入中断处理函数;TIM3_CNT从0开始计数。 // 看一下时钟频率 根据时钟树得到TIM3挂载在APB1时钟上,APB1来自SYSCLK时钟,是来自PLLCLK,有HSE时钟经过分频-倍频-分频得到的; stm32F407中时钟HSE的
STM32F407 定时器功能引脚分配
学习交流加(可免费帮忙下载CSDN资源): 个人微信:coderAllen 学习交流资源分享①群:736386324 推荐阅读: 如何更快的学习单片机?
STM32F407 定时器的应用问题
现在想利用一个定时器实现20ms的定时,然后利用另一个定时器将这20ms 分成360份,实现的是在20ms内等间隔的发送360个数,请问这能实现吗?初学者不是很懂,现在只能实现20ms的中断,请各位指点一下,最好是具体的实现方法。谢谢!!
stm32f407通用定时器
clk_int = 84M;计数器当前值计数器:CNT; 预分频计数器:TIMx_PSC;自动重装在寄存器:TIMx_ARR;控制寄存器:TIMx_CR1;TIMx_DIER;中断势能寄存器TIMx_DIER;库函数配置:TIM_TimeVaseInit();定时器中断实现步骤:使能定时器时钟(定时器为外设);初始化定时器(配置ARRPSC)开启定时器中断,配置NVIC;使能定时器;编写中断服务函...
STM32F407的定时器1之7路PWM输出
实验现象:输出频率为10K /**************************************************************************************** *函 数 名:bsp_InitTimer1GPIO *函数功能:初始化定时器1相关IO *形    参:无 *返 回 值:无 ***************************
5 定时器
setTimeout() setInterval() 定时器 在js中有两种定时器: 一次性定时器:setTimeout() 周期性循环定时器: setInterval() setTimeout() 只在指定的时间后执行一次 /定时器 异步运行 function hello(){ alert(&quot;hello&quot;); } //使用方法名字执行方法 var t1 = w...
STM32f407系统定时器时钟配置、计算
1. 外部晶振的选择 确定自己单片机的外部晶振 系统默认配置为25M,即打开官方库文件参数HSE Frequency(Hz) 一般为25000000 HSE Frequency(Hz) | 25000000 ---------- #if !defined (HSE_VALUE) #define HSE_VALUE ((uint32...
STM32F407各定时器的时钟频率
STM32F407各定时器的时钟频率 TIM1、TIM8~TIM11的时钟为APB2时钟的两倍即168M,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍即84M。
STM32F407 之 高级定时器功能描述
主要介绍下自己用到的一些功能 1、时基单元 主要包括: ● 计数器寄存器 (TIMx_CNT) ● 预分频器寄存器 (TIMx_PSC) ● 自动重载寄存器 (TIMx_ARR) ● 重复计数器寄存器 (TIMx_RCR) 预分频器说明:预分频器可对计数器时钟频率进行分频,分频系数介于 1 和 65536 之间。该预分频器基于TIMx_PSC 寄存器中的 16
触发定时器的小问题,很简单
[code=c]rnWidget::Widget(QWidget *parent) :rn QWidget(parent),rn ui(new Ui::Widget)rnrn ui->setupUi(this);rnrn QTimer *t1 = new QTimer(this);rnrn connect(t1, SIGNAL(timeout()), this, SLOT(TimerUpData()));rnrn //t1->start(100); 放在这里就正常rnrnrnrnvoid Widget::on_pushButton_clicked()rnrnrn Widget::t1->start();//放在这里,程序可以运行,但是单击按钮会卡死退出rnrnrn[/code]rnrn为什么? 谢谢
java :按钮触发定时器
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import j
定时器重复触发函数
我有一个定时器 在指定的间隔里去激活一个sendemail函数去发送emailrn并且每次发送完成记数器减一 为零时就不再激活rn但是因为因为发送有延时 在计数器还没有减一的时候 定时器已经调用了sendemail函数很多次了 请问怎么解决?
System.Threading.Timer定时器无法触发
定时器触发不了,代码帖出来了,前辈给指点指点!rnrnusing System;rnusing System.Threading;rnrnnamespace ConsoleApplication1rnrn rn public class Class12rn rn private System.Threading.Timer tmrRecv;rn private int lTemp=0;rn public Class12()rn rnrn private void fun2(object state)rn rn lTemp++;rn Console.WriteLine(lTemp);rn rnrnrn public static void Main()rn rn rn Class12 ccl=new Class12();rnrn TimerCallback tmrCallBack=new TimerCallback(ccl.fun2);rn ccl.tmrRecv=new System.Threading.Timer(tmrCallBack,null,0,4);rn rn rn rn
STM8定时器1的四种触发同步说明
这里说明下,我这边的最小系统版的芯片型号是105K系列的,定时器部分没有TIM5\TIM6,只有TIM4,所以不讲解TIM1与TIM5/6的同步,想要了解这部分可以看官方手册。 TIM1的计数器使用三种模式与外部的触发信号同步:标准触发模式、复位触发模式和门控触发模式。 标准触发模式: 说白了就是使用外部信号触发内部计数器启动,然而如何配置呢,看手册: 下面根据官方给出的步骤配置寄存器: vo...
基于STM32F407的 DMA + DAC 定时器触发实现的任意波形发生器
程序是基于STM32F407的任意波形发生器,可以通过STM32自带的DAC实现生成任意需要的波形,目前自己测试过正弦波和三角波 没有问题, 波形的时序是通过定时器出发来控制的 ,先通过函数生成对应的波形点图,然后通过定时器定时触发 来控制输出波形的频率,以此来实现任意波形的发生! 程序用到了 DMA DAC Timer 程序运行时CPU时间占用很少 适合嵌入大工程里面使用!
STM32F407高级定时器像普通定时器输出Pwm库函数配置
STM32F407 高级定时器配置像普通定时器输出PWM波 配置
stm32f407的双通道adc驱动主函数,由定时器触发,dma传输。
stm32f407的双通道adc驱动主函数,由定时器触发,dma传输。
STM32学习1之ADC+DMA(使用定时器触发)
笔者之前用STM32的ADC外设通过DMA通道来传输数据,通常有两种方法,一个是直接通过DMA通道传输数据,二是通过定时器触发。相较而言,后者在实际中比较常使用,因为ADC读取传感器数据需要一段时间,通常我们不会让处理器一直让ADC外设读取数据,而是根据ADC的读取时间和实际项目所需来使用定时器触发,有些传感器如室内温度我们不需要经常读取,我们可以200ms读取一次,在STM32处理器中就很方便了...
是定时器的关系吗?
我编了一个对话框程序。里面设置一个定时器,定时器是每隔一段时间从摄像头获取一次图像并进行处理(如果间隔时间短,就像一个视频)。rn然后我设置了一个按钮,按钮的响应函数是一个循环,循环条件是定时器中图像的处理结果,如果图像中没有出现设定的目标,则一直进行摄像头的旋转,如果摄像头在旋转地过程中发现了目标,则跳出循环,进行后面的操作。rn当我第一时间把目标放在摄像头前面并按下那个按钮时,没有进入那个循环,后续一切正常;可是当第一时间摄像头视野内没有目标时按下按钮,程序就死了,点击对话框上的任何控件没有响应,但确实进了那个循环,因为摄像头确实是在旋转,但已经不管有没有发现目标了。rn请问这是什么原因呢?
波特率与定时器初值关系
    首先,说一下啊波特率与定时器初值关系。     波特率:即单片机或者计算机在串口通信时的速率用波特率,它定义为每秒传输二进制代码的位数。    1波特率=1位/秒    串行口有4种工作方式,其中方式0和方式2的波特率是固定的,方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定的。串行口的4种工作方式对应3种波特率。由于输入的时钟来源不同,所以各种工作方式也不同。    4种方式波...
单文档程序,在VIEW中设置定时器,定时器不触发。
我的单文档程序,在VIEW中设置定时器,定时器只在程序启动时触发一次,以后不触发,并且第一次触发与定时器的时间间隔没有直接的关系,就是定时器不工作。rn但是我在FRAM中设置的定时器却能很好的工作,请问这是为什么?rn是不是定时器不适宜设置在VIEW中?rn我用的是WM_TIME处理定时器的事件。
5 定时器 Timer
5 定时器 TimerTimer类的主要作用是设置计划任务,但封装任务的却是TimerTask类,。执行计划任务的代码要放入TimerTask的子类中,因为TimerTask是一个抽象类。TimerTask实现了Runnable接口。
5、STM32 定时器的使用
STM32 一共有 11 个定时器, 其中 2 个高级控制定时器, 4 个通用定时器和 2 个基本定时器, 以及 2 个看门狗定时器和 1 个系统滴答定时器(SysTick), 计数器均为 16 位。 定时器 计数器类型 预分频系数 DMA请求 捕获/比较通道 互补输出 TIM1 向上/向下
定时器定时器
定时器,多种触发方式,代码简洁易控制
定时器0和定时器1 ARM PROTEUS
定时器0和定时器1 ARM PROTEUS
使用高级定时器,定时器1遇到的问题
初始化定时器1,开启定时器1中断,定时1S切换LED的状态。但是写好之后,测试发现灯的状态在44s才切换一次,一直找不到原因。最后发现了一点是高级定时器和普通定时器的区别: TIM_RepetitionCounte是用来配置重复计数,就是重复溢出多少次才给你来一个溢出中断,只有高级定时器需要配置。 下面是定时器1的程序: #include "Timer1.h" #include
定时器控制LED灯闪烁(定时器1)
int main() { Led_Init(); TIM1_Init(); delay_init(); while(1) { } } void TIM1_UP_IRQHandler(void) { TIM_ClearFlag(TIM1,TIM_FLAG_Update); LED = ~LED; }void TIM1_Init(void) { TIM_TimeBaseI...
.定时器控制LED灯闪烁(定时器1)
#include &amp;lt;sys.h&amp;gt; #include &amp;lt;led.h&amp;gt; #include &amp;lt;TIM1.h&amp;gt; int main(void) { NVIC_Configuration(); Led_init(); TIM1_Init(); while(1) { } } void TIM1_UP_IRQHandler (void) { TIM_ClearF...
STM32学习--定时器(通用定时器)1
通用定时器1. 组成结构1.1 组成模块  如图所示,通用定时器主要由计数部分、触发控制器、捕获/比较模块组成。计数部分的核心是计数器,受预分频器输出的信号(CK_CNT)驱动,实现向上、向下、对齐模式的自动装载计数。预分频器输入由触发控制器控制,可选内部时钟、外部触发输入、内部触发接口、外部输入,这是实现各种从模式的关键部分。捕获/比较模块是实现通用定时器各种输入输出的功能部分,主要分为输入部
单片机中断定时器定时器定时器
单片机中断 定时器 欢迎大家的使用 中断系统是一个很重要的概念
STM32定时器触发ADC +DMA
Stm32的ADC有DMA功能这都毋庸置疑,也是我们用的最多的!然而,如果我们要对一个信号(比如脉搏信号)进行定时采样(也就是隔一段时间,比如说2ms),有三种方法: 1、使用定时器中断每隔一定时间进行ADC转换,这样每次都必须读ADC的数据寄存器,非常浪费时间! 2、把ADC设置成连续转换模式,同时对应的DMA通道开启循环模式,这样ADC就一直在进行数据采集然后通过DMA把数据搬运至内存。但是这样做的话还得加一个定时中断,用来定时读取内存中的数据! 3、使用ADC的定时器触发ADC转换的功能,然后使用DMA进行数据的搬运!这样只要设置好定时器的触发间隔,就能实现ADC定时采样转换的功能,然后可以在程序的死循环中一直检测DMA转换完成标志,然后进行数据的读取,或者使能DMA转换完成中断,这样每次转换完成就会产生中断,我是采用第二种方法。
创建指定时间触发定时器
//结束定时器 void SetMatchTimer(WORD wHour,WORD wMinute,WORD wSeconds) { //变量定义 SYSTEMTIME stTimeCur;  //开始时间 SYSTEMTIME stStartTimer; //获取当前时间 GetLocalTime(&stTimeCur); GetLocalTime(&stStartTimer
stm32定时器触发ADC参考
stm32单片机在开发行业被广泛使用,其外设众多,也是它的优势之一。但在运用过程中我门也会常常遇到很多麻烦,该文档中的代码,实现的功能是使用定时器中断触发ADC采集。
STM32F407 双轮小车 定时器编码器模式测速
直流电机编码器测速 定时器编码器模式测速 STM32F407 方便移植 可硬件DBUG调试
C# WPF定时器的显示和触发
定时器DispatcherTimer类:(假设定义了一个DispatcherTimer类的实例timerOne)         Interval属性:表示多少时间间隔触发一次函数事件。例如:一秒钟触发一次函数事件 timerOne.Interval = new TimeSpan(0, 0, 1);           然后再触发函数: timerOne.Tick += T