历史上的今天
返回首页

历史上的今天

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

2018年06月29日 | stm32PWM精确控制脉冲个数

2018-06-29 来源:eefocus

/****************************

02

**TIM2的通道1使用单脉冲模式

03

**TIM3使用门控模式用来输出PWM

04

**

05

****************************/

06

//TIM2per:重装值

07

//Compare1:比较捕获1的预装载值

08

void Motor_Init(u16 TIM2per, u16 TIM3per, u16 TIM3Compare1)

09

{

10

  TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;

11

  TIM_OCInitTypeDef TIM_OCInitStruct;

12

  GPIO_InitTypeDef GPIO_InitStruct;

13

   

14

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能定时器2的时钟

15

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3的时钟

16

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA时钟

17

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能复用IO时钟

18

   

19

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

20

  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_6;//PA0

21

  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

22

  GPIO_Init(GPIOA,&GPIO_InitStruct);

23

   

24

  //TIM2工作在单脉冲下

25

  TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//没有时钟分割

26

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

27

  TIM_TimeBaseInitStruct.TIM_Prescaler = 7200;//预分频值,每100us计数一次

28

  TIM_TimeBaseInitStruct.TIM_Period = TIM2per;//重装值

29

  TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);

30

   

31

  TIM_SelectOnePulseMode(TIM2,TIM_OPMode_Single);//设置TIM2在单脉冲模式,且是单一的脉冲,在下一个更新事件停止

32

  TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);//使能定时器2的通道1预装载寄存器

33

  TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_OC1Ref);

34

   

35

  TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//在向上计数时,一旦TIMx_CNT

36

  TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//OC1输出使能

37

  TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//有效电平为高

38

  TIM_OCInitStruct.TIM_Pulse = 1;//比较捕获1的预装载值

39

  TIM_OC1Init(TIM2,&TIM_OCInitStruct);

40

   

41

  TIM_Cmd(TIM2,DISABLE);//先不使能能TIM2

42

   

43

   

44

  //TIM3工作在从模式的门控模式下的PWM输出模式

45

  TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//没有时钟分割

46

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

47

  TIM_TimeBaseInitStruct.TIM_Prescaler = 720;//预分频值,10us计数一次

48

  TIM_TimeBaseInitStruct.TIM_Period = TIM3per;//重装值

49

  TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);

50

   

51

  TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated);//TIM3为门控模式

52

  TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);//使能TIM3的主从模式

53

  TIM_SelectInputTrigger(TIM3,TIM_TS_ITR1);//内部触发,从TIM2触发

54

   

55

  TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//在向上计数时,一旦TIMx_CNT

56

  TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//OC1输出使能

57

  TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//有效电平为高

58

  TIM_OCInitStruct.TIM_Pulse = TIM3Compare1;//比较捕获1的预装载值

59

  TIM_OC1Init(TIM3,&TIM_OCInitStruct);

60

   

61

  TIM_Cmd(TIM3,ENABLE);//使能TIM3

62

}

63

 

64

//设置PWM的输出

65

//Cycle:为周期,单位(us)

66

//Pulse_Num:为脉冲个数(小于3200)

67

void TIM2_TIM3_PWM(u16 Cycle, u16 Pulse_Num)

68

{

69

  u16 TIM3per = 0;

70

  u32 Time = 0;

71

  //改变TIM3的重装值改变脉冲频率这里设置脉冲占空比为50%

72

  //改变TIM2的预分频器和重装值改变脉冲个数

73

     

74

  Time = Cycle * Pulse_Num;

75

  Time /= 100;              //预分频为7200,100us计数一次

76

  TIM3per = Cycle/10;       //预分频为720,10us计数一次

77

   

78

  TIM_SetAutoreload(TIM2, Time+1);//设置TIM2的重装值

79

  TIM_SetAutoreload(TIM3, TIM3per-1);//设置TIM3的重装值

80

  TIM_SetCompare1(TIM3,TIM3per/2);//设置占空比为50%

81

  TIM_Cmd(TIM2,ENABLE);//使能TIM2

82

}


推荐阅读

史海拾趣

American Custom Components公司的发展小趣事

近年来,电子行业面临着原材料价格上涨、市场竞争激烈等挑战。American Custom Components公司也不例外,面临着成本压力和市场份额的下降。为了应对这些挑战,公司采取了一系列措施,包括优化生产流程、降低生产成本、加强研发创新等。同时,公司还积极拓展新的应用领域和市场,寻找新的增长点。这些努力使得公司在行业竞争中保持了一定的优势。

Decawave公司的发展小趣事

Decawave公司成立于2007年,总部位于爱尔兰都柏林。成立之初,公司就专注于超宽带(UWB)技术的研发。在初创阶段,Decawave面临着技术难度大、资金紧张等挑战。然而,凭借对UWB技术的深入理解和研究,公司成功开发出了具有高精度定位能力的UWB芯片,这一技术突破为Decawave在电子行业中赢得了声誉。

C-MEDIA公司的发展小趣事

随着公司业务的不断扩展,C-MEDIA开始实施全球化战略,积极寻求与国际知名企业的合作。通过与全球领先的电子企业、内容提供商和媒体平台建立战略合作关系,C-MEDIA成功地将自己的技术和产品推向了更广阔的市场。这些合作不仅提升了公司的品牌知名度和市场份额,也为公司的长期发展奠定了坚实的基础。

以上只是C-MEDIA公司在电子行业中的一些重要发展节点和故事的概括性描述。实际上,公司的发展过程中还涉及到许多其他的细节和因素,包括市场竞争、技术创新、人才引进等等。这些故事共同构成了C-MEDIA在电子行业中的发展轨迹,展示了其不断进取、追求卓越的精神风貌。

达方(DARFON)公司的发展小趣事

面对日益严峻的环境问题,达方电子积极响应国家号召,将绿色发展理念融入公司战略。公司加大了对环保技术的研发力度,推出了多款绿色、节能的产品。同时,达方电子还积极参与公益事业,为社会做出了积极贡献。这一阶段的努力,不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

Hanghsing Enterprise Co Ltd公司的发展小趣事

进入21世纪后,达方电子在技术研发上取得了重大突破,成功研发出多款具有竞争力的新产品。同时,公司积极开拓国际市场,通过与国际知名品牌的合作,将产品销往全球各地。这一阶段的成功,不仅使达方电子的营收大幅增长,也进一步提升了公司的品牌影响力。

Easy Magnet Corp公司的发展小趣事

Easy Magnet Corp公司最初由几位热衷于磁性材料研究的科学家和工程师创立。他们发现了一种新型磁性材料,具有极高的磁导率和稳定性。基于这一发现,他们开始研发适用于电子产品的磁性元件。最初的产品虽然简单,但因其高性能和可靠性,很快在市场中获得了认可。随着订单的增加,公司逐渐扩大了生产规模,并开始了技术研发的深入探索。

问答坊 | AI 解惑

求助51单片机在超声波测距的应用 毕业论文

设计基于51单片机超声波测距系统!…

查看全部问答>

结缘lpc及lpc开发环境的建立

首先, 感谢NXP 感谢https://bbs.eeworld.com.cn/ 及eeworld 的soso 姐,是他们给了我这个机会,让我与lpc 结缘在此我想把我所学到的lpc 的一点一滴记录下来,与大家分享,   正文在 pdf里…

查看全部问答>

51单片机,用一个独立按键来实现跑表遇到一点问题。

1.数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。(用定时器设计表)。 code: #include #define uchar unsigned char #define uint  unsigned int sbit key1 = P3^ ...…

查看全部问答>

关机操作???

我现在关机都是用 SetSystemPowerState(NULL, POWER_STATE_OFF, POWER_FORCE); 然后控制一个gpio使硬件断电。 可我想关机前应该要关闭所有程序之类的操作,这个SetSystemPowerState做了吗?没做的话该如何做呢?…

查看全部问答>

高分:关于单片机PID控制输出的问题

有没有谁有现成的程序(使用过的),共享一下, 我现在的程序,不知道为什么,好像都不能用啊…

查看全部问答>

求ARM接16C554的原理图

高分求ARM接TL16C554(串口扩展)的原理图,我的邮箱mynhz@yahoo.com.cn,谢谢.…

查看全部问答>

求助:怎样编程实现89c51控制320240液晶屏显示的问题

用51控制一个320×240的液晶屏,该液晶屏的驱动芯片是ra8835,需要在屏幕上显示四个设备名称,单片机51的P2口通过继电器连接那四个设备,另有两个按键接在51的2个管脚上,要实现的功能是一个按键用来选择哪个设备,同时能在屏幕上显示当前选择的设 ...…

查看全部问答>

[求助]LaunchPad自带的虚拟串口识别为COM5,用什么软件连接啊?

[求助]LaunchPad自带的虚拟串口识别为COM5,用什么软件连接啊?试了几个串口工具都只支持COM1-COM4………

查看全部问答>

请高手不吝赐教,谢谢

我想做一个电池监测器,来监测电量的多少。  用MAX6775来监测电量,用发光二极管来报警。请问各位我应该怎么设计电路?电路中的电阻应如何选取?因为MAX6775芯片资料是英文的,也看不太懂,请各位高手帮帮忙指点指点。谢谢。   &nb ...…

查看全部问答>

android开发教材

:Q android你值得拥有!…

查看全部问答>