历史上的今天
返回首页

历史上的今天

今天是:2025年06月17日(星期二)

正在发生

2020年06月17日 | 采用TIM1高级定时器产生PWM

2020-06-17 来源:eefocus

简介

STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和 TIME7 等基本定时器。而每种定时器的使用方法略有不同,之前写产生pwm的程序使用的都是通用定时器,今天使用高级定时器TIM1时发现怎么也产生不了,后来才知道使用TIM1时,需要多添加两行代码


//重复计数器的值

 TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;


// 主输出使能,当使用的是通用定时器时,这句不需要

TIM_CtrlPWMOutputs(TIM1, ENABLE);


高级定时器TIM1的TIM1_TIM1BaseInitTypeDef结构体

在这里插入图片描述

TIM1_RepetitionCounter是高级定时器特有的一个值,使用时需要对其进行初始化

在这里插入图片描述

主输出使能,使用的是高级定时器时,需要添加这个函数

在这里插入图片描述

参考代码

控制GPIO PA8/PA11产生PWM来控制两个舵机

TIM1_CH1/TIM1_CH4

在这里插入图片描述

void TIM1_PWM_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;   //声明一个结构体变量,用来初始化GPIO


TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//声明一个结构体变量,用来初始化定时器


TIM_OCInitTypeDef TIM_OCInitStructure;//根据TIM_OCInitStruct中指定的参数初始化外设TIMx


/* 开启时钟 */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);


/*  配置GPIO的模式和IO口 */

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_11;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出

GPIO_Init(GPIOA,&GPIO_InitStructure);



//TIM1定时器初始化

TIM_TimeBaseInitStructure.TIM_Period = 199;//900;    //不分频,PWM 频率=72000/900=8Khz//设置自动重装载寄存器周期的值

TIM_TimeBaseInitStructure.TIM_Prescaler = 7199;//0;//设置用来作为TIMx时钟频率预分频值,100Khz计数频率

TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//设置时钟分割:TDTS = Tck_tim

TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

// 重复计数器的值,没用到不用管

    TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;

    TIM_TimeBaseInit(TIM1, & TIM_TimeBaseInitStructure);

    

//PWM初始化   

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM输出使能

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;


TIM_OC1Init(TIM1,&TIM_OCInitStructure);

TIM_OC4Init(TIM1,&TIM_OCInitStructure);

//注意此处初始化时TIM_OC2Init而不是TIM_OCInit,否则会出错。因为固件库的版本不一样。


TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);//使能或者失能TIMx在CCR2上的预装载寄存器

TIM_Cmd(TIM1,ENABLE);//使能或者失能TIMx外设

// 主输出使能,当使用的是通用定时器时,这句不需要

    TIM_CtrlPWMOutputs(TIM1, ENABLE);

}


int main()

{

TIM1_PWM_Init();

while(1)

{

TIM_SetCompare1(TIM1, 195);//0度

delay_ms(100);

TIM_SetCompare1(TIM1, 190);//45度

delay_ms(100);


TIM_SetCompare4(TIM1, 195);//0度

delay_ms(100);

TIM_SetCompare4(TIM1, 190);//45度

delay_ms(100);

}

}

推荐阅读

史海拾趣

依必安派特(ebmpapst)公司的发展小趣事

在快速发展的过程中,依必安派特也面临着一些挑战。其中之一就是仿冒产品的泛滥。为了维护品牌形象和客户利益,依必安派特积极打击仿冒产品。例如,在2023年,依必安派特和地方政府联手突击了一家位于广东的仿冒产品工厂,揭示了其造假行为。这一行动不仅保护了依必安派特的品牌声誉和客户信任,也为中国市场的公平竞争环境做出了贡献。

智浦欣(Chipstar)公司的发展小趣事

在2010年4月的上海张江高科技园区,一群志同道合的工程师和创业者聚集在一起,共同创立了上海智浦欣微电子有限公司。他们怀揣着对模拟及数模混合IC技术的深厚理解和热爱,立志要在消费类电子市场占据一席之地。起初,公司面临着资金紧张、技术挑战和市场压力等多重困难,但团队成员凭借对技术的执着和对市场的敏锐洞察,逐步攻克难题,研发出了几款性能优越的音频放大器和电源管理产品,为公司赢得了初步的市场认可。

Ecera Comtek Corp公司的发展小趣事

随着公司实力的不断增强,Ecera Comtek Corp公司开始寻求更广阔的发展空间。公司决定进军国际市场,拓展海外业务。然而,国际市场的竞争更加激烈,Ecera Comtek Corp公司面临着来自全球各地的强大竞争对手。为了应对这一挑战,Ecera Comtek Corp公司加强了与国际合作伙伴的联系,共同研发新产品,开拓新市场。同时,公司还加大了对海外市场的宣传力度,提高了品牌的知名度和美誉度。经过几年的努力,Ecera Comtek Corp公司的产品逐渐在国际市场上获得了认可,海外业务也取得了显著的进展。

CETC公司的发展小趣事

CETC自成立以来,一直致力于电子科技领域的研发创新。在某次关键技术的攻关中,CETC的科研团队经过数月的艰苦努力,成功突破了某型雷达的核心技术,使我国在该领域达到了国际先进水平。这一成果的取得不仅提升了CETC的技术实力,也为公司在国内外市场赢得了良好的声誉,为公司的后续发展奠定了坚实基础。

BOOKHAM公司的发展小趣事

随着电子行业的快速发展和技术的不断更新换代,BOOKHAM公司始终保持敏锐的市场洞察力和创新精神。公司不断投入研发资源,推出新产品和新技术,以适应市场的变化和满足客户的需求。同时,公司还注重产品质量和客户服务的提升,通过优质的产品和服务赢得了客户的信任和好评。这些努力使得BOOKHAM公司在激烈的市场竞争中始终保持领先地位。

以上是根据电子行业的一般发展情况和常见的企业发展模式虚构的关于BOOKHAM公司发展的故事。虽然这些故事是基于虚构的,但它们可能反映了BOOKHAM公司在实际发展中可能遇到的一些情况和挑战。

AR RF/Microwave Instrumentation公司的发展小趣事

AR RF/Microwave Instrumentation的创立源于对射频和微波技术的深入研究和理解。公司创始人在行业内具有丰富的经验,他们看到了这一领域的巨大潜力,并决定成立一家公司来专门研发和生产相关的仪器设备。起初,公司规模较小,但凭借高质量的产品和专业的服务,逐渐在行业内赢得了声誉。

问答坊 | AI 解惑

嵌入式系统与以太网的连接

1 引言   目前,以太网(Ethernet)协议已经非常广泛地应用于各种计算机网络,如办公局域网、工业控制网络等场合,并且还不断地发展。基于以太网的新技术和联网设备不断出现,以太网已经成为事实上最常用的局域网络标准之一。但是,基于以太网的 ...…

查看全部问答>

脆求高手指点CoCreateInstance

各位高手:我在EVC下写了一个显示JPG图片的程序,可是在调用CoCreateInstance时总是失败,脆求高手指点啊! IImagingFactory *pImageFactory = NULL; IImage *pImage = NULL; CoInitializeEx(NULL,COINIT_MULTITHREADED); if(SUCCEEDED(CoCreat ...…

查看全部问答>

RaiseException 如何解决

各位好:我的平台基于WINCE5.0 上面有带CF 的WIFI.一旦无线网卡连接上网络,我打开Explorer 没有下面的错误信息出现。如果拔掉网卡,在打开EXPLORER 就会出现下面的信息,请问如何解决 谢谢 RaiseException: Thread=87647640 Proc=8299add0 \'ie ...…

查看全部问答>

mini gui和 qt比较 学习哪个好 现在哪个用的比较多 谢谢

我是初学   方向性问题  希望得到各位指点…

查看全部问答>

STM32有没可通过USB执行ISP的片子?

我觉得这种方式非常方便:一根USB、一台本本就可以去现场了。而且生产也方便!…

查看全部问答>

ST-LinkUtility这个软件的源码能不能公开?

感觉ISP下载,还得占用串口。开发的时候用SWD,下载时如果也能用SWD口就好了。 现在这个ST-Link Utility好像可以实现这个功能。但是出于代码保密考虑,想自己编写个类似功能的软件,可是怎么做呢? 所以希望这个软件的代码能公开,或者把相 ...…

查看全部问答>

关于C调用汇编函数 参数问题

再看uC/OS-II移到msp430上时看到这里OSCPUSaveSR            MOV.W    SR,R12            DINT ...…

查看全部问答>

关于锂电池7.4V转5V的电源芯片

设计一个电路利用了7.4V的锂电池,但是工作电压为5v。这个电路的电流大约为150ma左右,应该用什么转换芯片呢?主要是考虑在锂电池正常工作的时候可以输出7.4V的电压,可是当电压下降之后如何保证输出为5V,因此想选一个输入电压范围比较宽的,有哪 ...…

查看全部问答>

关于MSP430f149的RS485通信,高手请进

下面是我编写的MSP430f149的485通信小程序,请各位大侠看看问题出在哪里? 程序目的:想用串口精灵发送一个字节数据给单片机,然后单片机再将接受的数据回发给串口精灵。 下面是错误的现象描述: 1.C:\\Users\\panruifeng\\Desktop\\1.jpg串口精 ...…

查看全部问答>

MSP430 内置温度传感器的精度

产品说明书中提供了带有相应容差范围的额定 00C 电压与温度系数。额定 00C 电压规定为986mV,其最大误差为 +/- 5%。因此,温度传感器的 00C 电压在最恶劣的环境下,每个器件可能会相差几乎 +/- 50mV。这大约等于 +/- 14C。请注意,这种差异主要与各 ...…

查看全部问答>