zhahl 发表于 2016-12-23 17:18:06

STM32f103 tim1 PWM 求助

我在PWM设置1通道为输出,在程序仿真时波形正常,下载进去就没有波形了,求大神指教!

zhahl 发表于 2016-12-23 17:49:59

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
        TIM_OCInitTypeDefTIM_OCInitStructure;

/* Enable TIM1 clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //TIM1

// Time Base configuration,定时器初始化
TIM_TimeBaseStructure.TIM_Period = 1000-1;      //定时时间:50*10us=500us
TIM_TimeBaseStructure.TIM_Prescaler = 0;// 720/72 = 10us,定时器周期
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //0
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

// TIM1 configure
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);    //初始化定时器1

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
//TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_Pulse = 750;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
//TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
//TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
// TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;

TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
/* TIM1 Main Output Enable
   TIM1 counter enable */
TIM_Cmd(TIM1, ENABLE);

zhahl 发表于 2016-12-23 17:50:21

zhahl 发表于 2016-12-23 17:49


这是代码

wenyangzeng 发表于 2016-12-23 18:32:28

你好像没有使能相关的GPIO口呀。

五哥1 发表于 2016-12-23 23:08:48

能在仿真时出现正确的波形,但是在硬件上没有,这个还是硬件的问题,看看你的硬件是否连线正常,先测试下相应的基本功能。再根据出现的情况一步一步分析。

ts2000 发表于 2016-12-24 08:32:44

仿真是有点区别。还是按实际的用吧

shuolang126 发表于 2016-12-24 08:38:20

/* System Clocks Configuration */
RCC_Configuration();

/* GPIO Configuration */
GPIO_Configuration();

/* TIM1 Configuration ---------------------------------------------------
   TIM1CLK = SystemCoreClock, Prescaler = 0, TIM1 counter clock = SystemCoreClock
   SystemCoreClock is set to 72 MHz for Low-density, Medium-density, High-density
   and Connectivity line devices and to 24 MHz for Low-Density Value line and
   Medium-Density Value line devices
   
   The objective is to generate 7 PWM signal at 17.57 KHz:
   - TIM1_Period = (SystemCoreClock / 17570) - 1
   The channel 1 and channel 1N duty cycle is set to 50%
   The Timer pulse is calculated as follows:
   - ChannelxPulse = DutyCycle * (TIM1_Period - 1) / 100
----------------------------------------------------------------------- */
/* Compute the value to be set in ARR regiter to generate signal frequency at 17.57 Khz */
TimerPeriod = (SystemCoreClock / 17570 ) - 1;
/* Compute CCR1 value to generate a duty cycle at 50% for channel 1 and 1N */
Channel1Pulse = (uint16_t) (((uint32_t) 5 * (TimerPeriod - 1)) / 10);
/* Time Base configuration */
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = TimerPeriod;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

/* Channel 1 Configuration in PWM mode */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_Pulse = Channel1Pulse;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;

TIM_OC1Init(TIM1, &TIM_OCInitStructure);

/* TIM1 counter enable */
TIM_Cmd(TIM1, ENABLE);

/* TIM1 Main Output Enable */
TIM_CtrlPWMOutputs(TIM1, ENABLE);
--------------------------------------------------------------------
以上是官方例程,请参考!
楼主确实IO初始化和TIM_CtrlPWMOutputs(TIM1, ENABLE);
不妨试试!
另外,仿真和脱机运行会不一致是正常的!
页: [1]
查看完整版本: STM32f103 tim1 PWM 求助