你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

利用STM32的PWM模块发出固定个数的PWM脉冲  

[复制链接]
z258121131 发布时间:2016-9-22 15:46
由于项目需要,需要发出固定个数的PWM脉冲,因为未接触过网上搜集的也多不行,后来根据官方手册调试成功。使用的第一种方式,后续的测试后放出。
void PWMS8_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
   /* TIM4 clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
  /* GPIOB clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
  /* TIM4_CH1 pin (PB.06) configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);


TIM_TimeBaseStructure.TIM_Period = 200;
  TIM_TimeBaseStructure.TIM_Prescaler = 7200;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 5;
  TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);

TIM_GenerateEvent(TIM8,TIM_EventSource_Update);
TIM_InternalClockConfig(TIM8);
TIM_SelectOCxM(TIM8,TIM_Channel_2,TIM_OCMode_PWM1);
/* PWM1 Mode configuration: Channel2 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 100;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  TIM_OC2Init(TIM8, &TIM_OCInitStructure);
  TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);
  TIM_ARRPreloadConfig(TIM8, ENABLE);
  /* TIM8 enable counter */
TIM_CtrlPWMOutputs(TIM8,ENABLE);

TIM_SelectOnePulseMode(TIM8,TIM_OPMode_Single);
  TIM_Cmd(TIM8, ENABLE);
}

以上是核心代码,自己可根据需要修改,生成不同个数以及频率的脉冲。

通用定时器.pdf

下载

1.81 MB, 下载次数: 876

评分

参与人数 1 ST金币 +10 收起 理由
zero99 + 10

查看全部评分

1 收藏 7 评论25 发布时间:2016-9-22 15:46

举报

25个回答
学习痴狂 回答时间:2017-7-16 10:38:10
foleon 发表于 2017-3-13 15:55
我修改了不起作用

这个功能只对高级定时器起作用,普通定时器实现不了
  1. if ((TIMx == TIM1) || (TIMx == TIM8))  
  2.   {
  3.     /* Set the Repetition Counter value */
  4.     TIMx->RCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter;
  5.   }
复制代码
z258121131 回答时间:2016-12-14 09:28:05
foleon 发表于 2016-12-13 14:40
你好,这段代码看不太明白能解释一下吗?我现在也需要调试步进电机,不知道怎么产生固定的脉冲数,我用的ti ...

你只需要对应的修改引脚就可以了啊
琳风 回答时间:2018-10-16 10:45:18
z258121131 发表于 2016-12-15 09:06
TIM_TimeBaseStructure.TIM_RepetitionCounter = 1000,修改RCR寄存器的值

RCR寄存器是8位的,怎么可能写成1000呢
飞行的UPS 回答时间:2016-10-12 17:50:05
学习下
foleon 回答时间:2016-12-13 14:40:00
你好,这段代码看不太明白能解释一下吗?我现在也需要调试步进电机,不知道怎么产生固定的脉冲数,我用的tim3,楼主能指导一下吗
foleon 回答时间:2016-12-14 14:06:36
z258121131 发表于 2016-12-14 09:28
你只需要对应的修改引脚就可以了啊

还是不明白,加入我要输出1000个脉冲,要修改什么呢
5265325 回答时间:2016-12-14 17:48:35
z258121131 回答时间:2016-12-15 09:06:13
TIM_TimeBaseStructure.TIM_RepetitionCounter = 1000,修改RCR寄存器的值
xhzheng 回答时间:2016-12-15 11:25:48
学习咯;
foleon 回答时间:2017-3-13 15:55:21
z258121131 发表于 2016-12-15 09:06
TIM_TimeBaseStructure.TIM_RepetitionCounter = 1000,修改RCR寄存器的值

我修改了不起作用
z258121131 回答时间:2017-3-21 20:26:53
foleon 发表于 2017-3-13 15:55
我修改了不起作用

你要实现什么?传上来看看
牙签骑士 回答时间:2017-6-4 03:03:59
想问个问题,你这个最高速度多少
Silenceasd 回答时间:2017-7-29 15:45:05
楼主  我怎么更改引脚,比如用PB0输出PWM呢
Silenceasd 回答时间:2017-7-29 15:54:38
怎么改用其他io口输出脉冲呢?比如PB0
weizuokai 回答时间:2017-12-5 17:44:03
这个能重复输出吗,每次都要调这个函数不是很耗时?
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版