stm32的通用stm32定时器时钟频率能够输出的最大频率是多少

STM32普通定时器(TIM2-7)的时钟源疑问 - CSDN博客
STM32普通定时器(TIM2-7)的时钟源疑问
STM32F103的APB1最大总线时钟是AHB总线时钟的1/2,最大为36MHz,在用ST的库函数(v2.0)的时候,TIM2(普通定时器)的时钟频率为72MHz,不知道原因何在?
【问题分析】
STM32中有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。其它6个为普通定时器,时钟由APB1的输出产生。
下图是STM32参考手册上时钟分配图中,有关定时器时钟部分的截图:
从图中可以看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,图中的蓝色部分。
下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。
假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;当预分频系数=1时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作用);当预分频系数=2时,APB1=18MHz,在倍频器的作用下,TIM2~7的时钟频率=36MHz。
有人会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?答案是:APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM2~7仍能得到较高的时钟频率。
再举个例子:当AHB=72MHz时,APB1的预分频系数必须大于2,因为APB1的最大频率只能为36MHz。如果APB1的预分频系数=2,则因为这个倍频器,TIM2~7仍然能够得到72MHz的时钟频率。能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。
sysclock/(TIM_Prescaler+1) = 72MHz/36000 = 2000Hz
1/2000Hz = 0.5ms
0.5ms * 100 = 50ms
TIM_TimeBaseInitTypeDef
TIM_TimeBaseS
TIM_OCInitTypeDef
TIM_OCInitS
TIM_DeInit( TIM2);//复位TIM2定时器
/* TIM2 configuration */
TIM_TimeBaseStructure.TIM_Period = 100; //50ms定时时间,单位ms
TIM_TimeBaseStructure.TIM_Prescaler = 35999;//频率2kHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
//计数方向向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* Clear TIM2 update pending flag[清除TIM2溢出中断标志] */
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
/* Enable TIM2 Update interrupt [TIM2溢出中断允许]*/
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
//关闭定时器2,通过串口接收事件启动该定时器
TIM_Cmd(TIM2, DISABLE);
/******************************************************************/
void TIM_Configuration(void)
TIM_TimeBaseInitTypeDef TIM_BaseInitS
TIM_OCInitTypeDef TIM_OCInitS
//TIM1 使用内部时钟
//TIM_InternalClockConfig(TIM1);
//TIM1基本设置
//设置预分频器分频系数71,即APB2=72M, TIM1_CLK=72/72=1MHz
//TIM_Period(TIM1_ARR)=1000,计数器向上计数到1000后产生更新事件,计数值归零
//向上计数模式
//TIM_RepetitionCounter(TIM1_RCR)=0,每次向上溢出都产生更新事件
TIM_BaseInitStructure.TIM_Period = 1000;
TIM_BaseInitStructure.TIM_Prescaler = 71;
TIM_BaseInitStructure.TIM_ClockDivision = 0;
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_BaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure);
//清中断,以免一启用中断后立即产生中断
TIM_ClearFlag(TIM1, TIM_FLAG_Update);
//使能TIM1中断源
TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
//TIM1总开关:开启
TIM_Cmd(TIM1, ENABLE);
本文已收录于以下专栏:
相关文章推荐
PX4飞控中利用EKF估计姿态角代码详解PX4飞控中主要用EKF算法来估计飞行器三轴姿态角,具体c文件在px4\Firmware\src\modules\attitude_estimator_ekf\...
上午想要用Timer10做相对精确的延时功能,但是用示波器发现实际延时数值总是只有一半,百思不得其解。
仔细查阅各处资料结合实际研究后对stm32f407的14个定时器的时钟做一个总结:
STM32中定时器的时钟源
/bbs/dpj-34527-1.html
(出处: 单片机论坛)
STM32中有多达8个定时器,其中TIM1和TIM8是...
STM32F103的APB1最大总线时钟是AHB总线时钟的1/2,最大为36MHz,在用ST的库函数(v2.0)的时候,TIM2(普通定时器)的时钟频率为72MHz,不知道原因何在?
void TIM_ResetCounter(TIM_TypeDef * TIMx)
TIMx-&CNT = 0;
void TIM2_Delay_ms(unsigned int cm...
在STM32F1系列中,其中定时器TIM1、TIM8是挂在在APB2上的,而定时器TIM2、3、4是关在在APB1上的。
在工程中我们一般设置APB1CLK = 36M  APB2CLK = 72M
在下面的测试程序中,如果将Init_CLK()函数中的 CLK_CKDIVR |= 0x08;去掉’|‘,则TIM1的功能实现跟预设定相同(10ms中断一次),但是TIM2的PWM频率就变...
STM32F4时钟设置分析
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
STM32F4的系统时钟非常重要,涉及到整个系统的运行结果,无论是什么操作,都需要时钟信号,不同型号的微控制器的默认系统时钟配置是不同的,这里,给出两种配置STM32F407系统时钟的方法。
void RCC_Configuration(void)
  RCC_DeInit();//将外设 RCC寄存器重设为缺省值
  RCC_HSICmd(ENABLE);//使能HSI  ...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)stm32 定时器2这个做出来输出频率怎么是2000Hz呢?高了一倍?_stm32吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:26,959贴子:
stm32 定时器2这个做出来输出频率怎么是2000Hz呢?高了一倍?收藏
/* TIM2 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//APB1时钟为36Mhz
/* GPIOA and GPIOB clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /*配置tim2输出引脚ch1-ch4 */ GPIO_InitStructure.GPIO_Pin =
GPIO_Pin_0 | GPIO_Pin_1;
// | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* 定时器2基本设置 */
TIM_TimeBaseStructure.TIM_Period = 35999;
//设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x0000和0xFFFF之间。
TIM_TimeBaseStructure.TIM_Prescaler = 0;
//设置了用来作为TIMx时钟频率除数的预分频值。它的取值必须在0x0000和0xFFFF之间。
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
//设置了时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
//选择了计数器模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* pwm定时器通道1设置 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
//选择定时器模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E //输出脚打开
TIM_OCInitStructure.TIM_Pulse = 17999;
//选择通道
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_H
//输出极性
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
/* PWM1 Mode configuration: Channel2 */ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E
TIM_OCInitStructure.TIM_Pulse = 8999;
TIM_OC2Init(TIM2, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
南京stm32培训,美国上市教育公司出品,15年嵌入式培训经验,不就业免费重学!达内stm32培训“先就业,后付款”全国103家培训中心,随时学习,有实力,有保障
我也遇到这个问题???
没搞明白,我就按72mhz时钟做的个。快点还好些嘛:的)
是的,因为APB1预分频不为1时,T2-T7定时器频率等于APB1*2=36*2=72MHZ
登录百度帐号推荐应用使用STM32的单个普通定时器产生4路不同频率的方波 - ARM单片机 - 电子工程世界网
使用STM32的单个普通定时器产生4路不同频率的方波
11:36:26来源: eechina
的有四路输出:TIMx_CH1、TIMx_CH2、TIMx_CH3和TIMx_CH4,可以使用输出比较的方法产生的输出,简单的方法是:
1)设置计数器为向上计式,将自动重装载寄存器设置为0xFFFF;这样计数器会循环计数。
2)每个定时器通道设置为输出比较模式,并设置比较匹配时对应的输出管脚翻转输出。
3)按照输出波形的半波周期计算出一个数值称作Half_Cyc。例如:定时器的时钟频率是72MHz,需要产生3456Hz的方波,则Half_Cyc = 72M/(3456*2) = 41667;如需要产生200kHz的方波,则Half_Cyc = 72M/(200k*2) = 180。
4)设置每个通道在输出比较匹配时产生中断,在中断中将比较寄存器的数值读出并加上Half_Cyc的数值,如果计算出的数值超过16位则舍弃超出的部分,再把这个新的数值写回相应的比较寄存器;这样下次比较成功将刚好发生在一个半波周期之后,对应的管脚将被翻转。
上述方法在要求频率不高时十分有效,但如果频率较高时会有频繁的中断产生,这时可以使用DMA加以改善。
上述方法的基础是通过不断改变输出比较的匹配点进而产生管脚翻转输出,我们可以事先计算好这些比较匹配点,并通过DMA在每次匹配时逐次更新比较寄存器的内容:
方法一、使用两个DMA缓冲区,在DMA控制器操作一个缓冲区时,程序计算好另一个缓冲区的数据,然后在DMA传输结束的中断处理中切换DMA操作的缓冲区。
方法二、使用一个大的DMA缓冲区,先计算好半个缓冲区的内容,启动DMA为循环模式并设置它在DMA传送一半和完成时均产生中断;启动DMA后继续计算好另外半个缓冲区的内容,当发生DMA中断时表示有一半缓冲区变空,这时在中断处理中计算好这半个缓冲区。
只要DMA缓冲区开的足够大,方法二可以保证CPU有充足的时间进行数据处理,并且保证不断地输出波形。
声明:以上说明没有经过实际验证,只是一个原理说明,也许还有没考虑周全的地方。
关键字:&&&&&&
编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。(转)STM32学习笔记(5):通用定时器PWM输出 - tdyizhen1314 - 博客园
STM32学习笔记(5):通用定时器PWM输出
日 TIMER输出PWM
1.&&&& TIMER输出PWM基本概念
脉冲宽度调制(PWM),是英文&Pulse Width Modulation&的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。一般用来控制步进电机的速度等等。
STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。
1.1&& PWM输出模式
STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的(&110&为模式1,&111&为模式2)。模式1和模式2的区别如下:
110:PWM模式1-在向上计数时,一旦TIMx_CNT&TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT&TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
111:PWM模式2-在向上计数时,一旦TIMx_CNT&TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT&TIMx_CCR1时通道1为有效电平,否则为无效电平。
由此看来,模式1和模式2正好互补,互为相反,所以在运用起来差别也并不太大。
而从计数模式上来看,PWM也和TIMx在作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式,关于3种模式的具体资料,可以查看《STM32参考手册》的&14.3.9 PWM模式&一节,在此就不详细赘述了。
1.2&& PWM输出管脚
PWM的输出管脚是确定好的,具体的引脚功能可以查看《STM32参考手册》的&8.3.7 定时器复用功能重映射&一节。在此需要强调的是,不同的TIMx有分配不同的引脚,但是考虑到管脚复用功能,STM32提出了一个重映像的概念,就是说通过设置某一些相关的寄存器,来使得在其他非原始指定的管脚上也能输出PWM。但是这些重映像的管脚也是由参考手册给出的。比如说TIM3的第2个通道,在没有重映像的时候,指定的管脚是PA.7,如果设置部分重映像之后,TIM3_CH2的输出就被映射到PB.5上了,如果设置了完全重映像的话,TIM3_CH2的输出就被映射到PC.7上了。
1.3&& PWM输出信号
PWM输出的是一个方波信号,信号的频率是由TIMx的时钟频率和TIMx_ARR预分频器所决定的,具体设置方法在前面一个学习笔记中有详细的交代。而输出信号的占空比则是由TIMx_CRRx寄存器确定的。其公式为&占空比=(TIMx_CRRx/TIMx_ARR)*100%&,因此,可以通过向CRR中填入适当的数来输出自己所需的频率和占空比的方波信号。
2.&&&& TIMER输出PWM实现步骤
1.&&&&&& 设置RCC时钟;
2.&&&&&& 设置GPIO时钟;
3.&&&&&& 设置TIMx定时器的相关寄存器;
4.&&&&&& 设置TIMx定时器的PWM相关寄存器。
第1步设置RCC时钟已经在前文中给出了详细的代码,在此就不再多说了。需要注意的是通用定时器TIMx是由APB1提供时钟,而GPIO则是由APB2提供时钟。注意,如果需要对PWM的输出进行重映像的话,还需要开启引脚复用时钟AFIO。
第2步设置GPIO时钟时,GPIO模式应该设置为复用推挽输出GPIO_Mode_AF_PP,如果需要引脚重映像的话,则需要用GPIO_PinRemapConfig()函数进行设置。
第3步设置TIMx定时器的相关寄存器时,和前一篇学习笔记一样,设置好相关的TIMx的时钟和技术模式等等。具体设置参看&TIMER基本定时功能&的学习笔记。
第4步设置PWM相关寄存器,首先要设置PWM模式(默认情况下PWM是冻结的),然后设置占空比(根据前面所述公式进行计算),再设置输出比较极性:当设置为High时,输出信号不反相,当设置为Low时,输出信号反相之后再输出。最重要是是要使能TIMx的输出状态和使能TIMx的PWM输出使能。
相关设置完成之后,就可以通过TIM_Cmd()来打开TIMx定时器,从而得到PWM输出了。
3.&&&& TIMER输出PWM源代码
由于我现在手上的奋斗开发板是将PB.5接到LED上,因此需要使用TIM3的CH2通道,并且要进行引脚重映像。打开TIM3之后,PWM输出,使得LED点亮,通过改变PWM_cfg()中的占空比可以调节LED的亮度。
#include "stm32f10x_lib.h"
void RCC_cfg();
void GPIO_cfg();
void TIMER_cfg();
void PWM_cfg();
//占空比,取值范围为0-100
int dutyfactor = 50;
int main()
&&&& int T
&&&&&& RCC_cfg();
&&&&&& GPIO_cfg();
&&&&&& TIMER_cfg();
&&&&&& PWM_cfg();
&&&&&& //使能TIM3计时器,开始输出PWM
&&&&&& TIM_Cmd(TIM3, ENABLE);
&&&&&& while(1);
void RCC_cfg()
&&&&&& //定义错误状态变量
&&&&&& ErrorStatus HSEStartUpS
&&&&&& //将RCC寄存器重新设置为默认值
&&&&&& RCC_DeInit();
&&&&&& //打开外部高速时钟晶振
&&&&&& RCC_HSEConfig(RCC_HSE_ON);
&&&&&& //等待外部高速时钟晶振工作
&&&&&& HSEStartUpStatus = RCC_WaitForHSEStartUp();
&&&&&& if(HSEStartUpStatus == SUCCESS)
&&&&&&&&&&&&& //设置AHB时钟(HCLK)为系统时钟
&&&&&&&&& &&&&RCC_HCLKConfig(RCC_SYSCLK_Div1);
&&&&&&&&&&&&& //设置高速AHB时钟(APB2)为HCLK时钟
&&&&&&&&&&&&& RCC_PCLK2Config(RCC_HCLK_Div1);
&&&&&&&&&&&&& //设置低速AHB时钟(APB1)为HCLK的2分频
&&&&&&&&&&&&& RCC_PCLK1Config(RCC_HCLK_Div2);
&&&&&&&&&&&&
&&&&&&&&&&&&& //设置FLASH代码延时
&&&&&&&&&&&&& FLASH_SetLatency(FLASH_Latency_2);
&&&&&&&&&&&&& //使能预取指缓存
&&&&&&&&&&&&& FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
&&&&&&&&&&&&& //设置PLL时钟,为HSE的9倍频 8MHz * 9 = 72MHz
&&&&&&&&&&&&& RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
&&&&&&&&&&&&& //使能PLL
&&&&&&&&&&&&& RCC_PLLCmd(ENABLE);
&&&&&&&&&&&&& //等待PLL准备就绪
&&&&&&&&&&&&& while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
&&&&&&&&&&&&& //设置PLL为系统时钟源
&&&&&&&&&&&&& RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
&&&&&&&&& &&&&//判断PLL是否是系统时钟
&&&&&&&&&&&&& while(RCC_GetSYSCLKSource() != 0x08);
&&&&&& //开启TIM3的时钟
&&&&&& RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
&&&&&& //开启GPIOB的时钟和复用功能
&&&&&& RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
void GPIO_cfg()
&&&&&& GPIO_InitTypeDef GPIO_InitS
&&&&&& //部分映射,将TIM3_CH2映射到PB5
//&&&& GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);
&&&&&& GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
&&&&&& //选择引脚5
&&& &&&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
&&&&&& //输出频率最大50MHz&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&& GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
&&&&&& //复用推挽输出&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&& GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
&&&&&& GPIO_Init(GPIOB,&GPIO_InitStructure);
void TIMER_cfg()
&&&&&& TIM_TimeBaseInitTypeDef TIM_TimeBaseS
&&&&&& //重新将Timer设置为缺省值
&&&&&& TIM_DeInit(TIM3);
&&&&&& //采用内部时钟给TIM3提供时钟源
&&&&&& TIM_InternalClockConfig(TIM3);
&&&&&& //预分频系数为0,即不进行预分频,此时TIMER的频率为72MHz
&&&&&& TIM_TimeBaseStructure.TIM_Prescaler = 0;
&&&&&& //设置时钟分割
&&&&&& TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
&&&&&& //设置计数器模式为向上计数模式
&&&&&& TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
&&&&&& //设置计数溢出大小,每计7200个数就产生一个更新事件,即PWM的输出频率为10kHz
&&&&&& TIM_TimeBaseStructure.TIM_Period = 7200 - 1;
&&&&&& //将配置应用到TIM3中
&&&&&& TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
void PWM_cfg()
&&&&&& TIM_OCInitTypeDef TimOCInitS
&&&&&& //设置缺省值
&&&&&& TIM_OCStructInit(&TimOCInitStructure);
&&&&&& //PWM模式1输出
&&&&&& TimOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
&&&&&& //设置占空比,占空比=(CCRx/ARR)*100%或(TIM_Pulse/TIM_Period)*100%
&&&&&& TimOCInitStructure.TIM_Pulse = dutyfactor * 7200 / 100;
&&&&&& //TIM输出比较极性高
&&&&&& TimOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_H
&&&&&& //使能输出状态
&&&&&& TimOCInitStructure.TIM_OutputState = TIM_OutputState_E
&&&&&& //TIM3的CH2输出
&&&&&& TIM_OC2Init(TIM3, &TimOCInitStructure);
&&&&&& //设置TIM3的PWM输出为使能
&&&&&& TIM_CtrlPWMOutputs(TIM3,ENABLE);
随笔 - 15705_STM32F4通用定时器详细讲解_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
05_STM32F4通用定时器详细讲解
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 stm32f 通用定时器 的文章

 

随机推荐