历史上的今天
今天是:2025年08月21日(星期四)
2019年08月21日 | STM32高级定时器TIM1、TIM15输出PWM
2019-08-21 来源:eefocus
1、TIM初始化基本过程及源码
(a)GPIO、TIM结构体变量申明
(b)GPIO、TIM时钟使能
(c)GPIO基本配置
(d)TIM配置、通道设置
(e)TIM使能
源码如下:
/**
* @brief void TIM_Configuration(void)
* @describe TIM配置 PWM输出初始化
TIM1 CH1 PA8
TIM1 CH2 PA9
TIM15 CH1 PB14
TIM15 CH2 PB15
* @param void
* @retval void
*/
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//时钟使能
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1|RCC_APB2Periph_TIM15, ENABLE);
//GPIOA配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8|GPIO_Pin_9;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_2);//PA8选择备用功能 电机1 TIM1 CH1
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_2);//PA9选择备用功能 电机1 TIM1 CH2
//GPIOB配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_1);//PB14选择备用功能 电机2 TIM15 CH1
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_1);//PB15选择备用功能 电机2 TIM15 CH2
//TIM配置
TIM_TimeBaseStructure.TIM_Period = fill_value;//480 最大计数值 决定PWM频率
TIM_TimeBaseStructure.TIM_Prescaler = 0;//时钟预分频数
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//时钟0分割 1次时钟频率 1次计数
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_TimeBaseInit(TIM15, &TIM_TimeBaseStructure);
//TIM通道配置
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse =fill_value*0.5;//通道占空比系数
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM1, &TIM_OCInitStructure);//TIM1通道1 电机1
TIM_OC2Init(TIM1, &TIM_OCInitStructure);//TIM1通道2 电机1
TIM_OC1Init(TIM15, &TIM_OCInitStructure);//TIM15通道1 电机2
TIM_OC2Init(TIM15, &TIM_OCInitStructure);//TIM15通道2 电机2
//通道CH3 调用 TIM_OC3Init 函数
//通道CH4 调用 TIM_OC4Init 函数
//使能TIM1 TIM15
TIM_Cmd(TIM1, ENABLE);
TIM_Cmd(TIM15, ENABLE);
TIM1->BDTR|=1<<15;//TIM1输出使能 其他定时器没有该寄存器 不需要此项配置
TIM15->BDTR|=1<<15;//TIM15输出使能 其他定时器没有该寄存器 不需要此项配置
}
在主函数调用
//1号电机正转
TIM_SetCompare1(TIM1,0.5*fill_value);
TIM_SetCompare2(TIM1,0);
//2号电机反转
TIM_SetCompare1(TIM15,0);
TIM_SetCompare2(TIM15,fill_value);
即可设置对应通道输出PWM
2、PWM输出验证

3、重要的相关配置
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_1);
该函数配置对应GPIO引脚的功能,具体的引脚功能参数GPIO_AF_x 找对应的芯片数据手册 查看
下图为STM32F051C8T6相关引脚功能


与其他普通定时器不同的是 特别注意TIM1、TIM15的BDTR寄存器 需要将MOD置位(寄存器第15位) 才能输出PWM
TIM1->BDTR|=1<<15;
TIM15->BDTR|=1<<15;
史海拾趣
|
现在的汽车设计工程师正不断致力于设计出重量和能耗更低,同时安全性和舒适性更高的汽车。工程师们越来越排斥利用常规的能耗技术——笨重而高成本的机械解决方案来达到这样的目标。平均到每一辆车来说,每额外增加50kg的重量或100W的功率会带来0.2 ...… 查看全部问答> |
|
在马潮老师的书上看到有讲解,MEAG16的T0工作模式部分讲解为有四种模式,对应有四种计数方式,例子题目是“N分 频系统的设计”,程序如下: /********************************************* File name & ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 03:38 编辑 1、今年不叫Sony杯了,好象换NEC赞助了。。呵呵 2、今年会对“最小系统”给出定义或者说明,所以往年的准备思路可能要换一换了,基本上现在给出的最小系统的概念是“单片机,ADC,DAC,存储”。一定 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 04:01 编辑 ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软 件。ARM架构是面向低预算市场设计的第一款RISC微处理器,基本是32位单片机 ...… 查看全部问答> |
|
辩论一下---8位单片机已过时,16位单片机成不了气候,32位单片机是大势所趋? 前不久在一本书上看到作者对单片机的一个评语,作者认为:8位单片机已过时,16位单片机成不了气候,32位单片机是大势所趋。 不知道大家对这个观点有什么看法? [ 本帖最后由 tiankai001 于 2010-7-8 08:30 编辑 ]… 查看全部问答> |
|
今天我公司和利时MACS V 1.1.0+SP2dcs出现奇怪的故障,现场一个精流塔磁翻板液位计与dcs显示不对,仪表工在现场液位计把dcs 过来的两根线拆除(两根线测量过有24vdc电压),可是在dcs上还有液位显示,再在模块卡件上两根线拆除,还是有液位显示,请 ...… 查看全部问答> |
|
估计有很多人和我一样,想大学上完就工作。 当然我是一个很普通的本科院校,学的自动化专业, 现在在实验室学习嵌入式这方面的东西,我看到咱们论坛很多的大侠们都是工作的。烦请您在空闲之余能够说一下,我们在学校应加强哪方面的锻炼,比如学些 ...… 查看全部问答> |




