历史上的今天
今天是:2025年01月02日(星期四)
2019年01月02日 | STM32F107的通用定时器PWM实验总结
2019-01-02 来源:eefocus
1. STM32F107的通用定时器是指: TIM2、TIM3、TIM4、TIM5、
2. STM32F107的通用定时器(TIM2、TIM3、TIM4、TIM5)的模式有向上计数、向下计数、中央对齐模式。
向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。
3. STM32F107的通用定时器的时钟选择有多种,一般使用RCC提供的内部时钟TIMxCLK, 由APB1时钟分频提供。
4. 状态标志位获取和清除
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_tTIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_tTIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_tTIM_IT);
5. PWM模式 :脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CRRx寄存器确定占空比的信号。
6. 可能要设置GPIO的复用或者重映射功能。void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_tTIM_OCPreload);
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx,FunctionalState NewState)
7. void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalStateNewState);
简单的说,ARPE=1,ARR立即生效。。。APRE=0,ARR下个比较周期生效。
8. void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef*TIM_OCInitStruct);
定时器输出函数初始化设置,主要有:
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //PWM模式2
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure. TIM_Pulse=100;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性:TIM输出比较极性高
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3OC2
9. 设置比较函数voidTIM_SetCompareX(TIM_TypeDef* TIMx, uint16_t Compare2);
定时器PWM实现步骤:
1. 使能定时器3和相关IO口时钟。
使能定时器3时钟:RCC_APB1PeriphClockCmd();
使能GPIOB时钟:RCC_APB2PeriphClockCmd();
2. 初始化IO口为复用功能输出。函数:GPIO_Init();
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
3. 这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置,
所以需要开启AFIO时钟。同时设置重映射。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
4. 初始化定时器:ARR,PSC等:TIM_TimeBaseInit();
5. 初始化输出比较参数:TIM_OC2Init();
6. 使能预装载寄存器: TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
7. 使能定时器。TIM_Cmd();
8. 不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare2();
1) TIM_TimeBaseStructure.TIM_ClockDivision这一行代码是干吗的啊
CKD[1:0]: 时钟分频因子 (Clock division) 这2位定义在定时器时钟(CK_INT)频率、死区时间和由死区发生器与数字滤波器(ETR,TIx)所用的采样时钟之间的分频比例。 00: tDTS = tCK_INT01 : tDTS = 2 x tCK_INT10: tDTS = 4 x tCK_INT11 :保留,不要使用这个配置
用来屏蔽一些不需要的毛刺的。比如你数字滤波器的频率为1M,N=8,则频率大于1MHz/8=125KHz(持续时间小于8us)的脉冲都会被忽略。可以用在按键消抖之类的。
史海拾趣
|
前言: 随着经济的快速发展,我国零售业市场不断的扩大,单店铺经营的从业者愈来愈多,不但丰富了产品的渠道供应,满足消费者的就近消费的需求,在另外一方面:也大大解决了社会就业的问题和个人投资的取向问题。总之,增加了市场的繁荣和 ...… 查看全部问答> |
|
wince 5.0 stepldr+eboot引导OS,eboot起不来,大家指导下 把stepldr.nb1烧到nand flash block0;eboot.nb0烧到nand flash block2.通过串口信息可以看到stepldr正常运行,可eboot没有反应. stepldr.bib 如下: MEMORY ; Name Start Size  ...… 查看全部问答> |
|
做modbus通讯. 一个PC作为从机(服务器),它的一个com1口能不能连接多个主机(客户端)?? 做modbus通讯. 一个PC作为从机(服务器),它的一个com1口能不能连接多个主机(客户端)??… 查看全部问答> |
|
关于如何网络协议的学习,tcp/ip???请熟悉tcp/ip的哥们指点一下 想学习tcp/ip协议,但不知道如何开始? 有几个问题 1:在学习中需要注意的问题 2:网络的5层都要特别关注么?对于嵌入式领域而言 3:对于嵌入式领域而言有什么特别需要注意的?… 查看全部问答> |
|
关于STM32USB中的SetEPTxStatus(ENDP1,EP_TX_NAK)问题USB,NAK 看过本论坛上的一个帖子https://bbs.eeworld.com.cn/redirect.php?tid=110546&goto=lastpost,里面提到“STM32接收到一个IN事件后发送完毕软件不用把端点设成NAK。硬件在每次成功的传输之后都会把端点的状态设为NAK。只需在下次要发送的时候 ...… 查看全部问答> |
|
CooCox成立于2009年初,致力于为ARM开发者提供免费和开源的嵌入式开发工具。CooCox开发了大量基于网络的组件,让嵌入式开发如搭积木般简单。CooCox希望能和所有ARM爱好者一起搭建一个贡献与分享的交流平台。 CooCox工具包括一整套的工具 ...… 查看全部问答> |
|
先有一频率3K左右的方波,要把其转换为精密的正弦波,用max275怎么实现,别的芯片也可以,跪求电路图!邮箱:124548443@qq.com [ 本帖最后由 lzb124548443 于 2013-5-28 10:20 编辑 ]… 查看全部问答> |




