OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7767|回复: 7

STM32F103ZET6,TIM1_CH1产生PWM,仿真时有,但下载到板子上用示波器测总是低电平。MCO已使能

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-1-22
在线时间
0 小时
发表于 2014-1-22 14:33:30 | 显示全部楼层 |阅读模式

//TIM1_CH1????????GPIOE.9??????????
void syringe_pwm_GPIO_Config(void)
    GPIO_InitTypeDef GPIO_InitStructure; 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE); //?????¨?±?÷1??GPIOE???è??AFIO???????????é?±??
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //?????¨?±?÷2?±??
GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE); //Timer1??????  TIM1_CH1->E9 
    //?è??????????????????????,????TIM1 CH1??PWM?????¨?? GPIOE.9
    
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9; //TIM1_CH1->E9
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //???????ì????
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(GPIOE, &GPIO_InitStructure); //??????GPIO
TIM_CtrlPWMOutputs(TIM1, ENABLE);//pwm?????????????¨???????ò????·??ò??·¨??????????????????????????????????????????????????????????



//TIM1?÷????????PWM??TIM2??????????????
void TIM1_Master__TIM2_Slave_Configuration(u32 PulseFrequency) 
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 
TIM_OCInitTypeDef TIM_OCInitStructure; 
u16 nPDTemp ; 

TIM_Cmd(TIM1, DISABLE); 
//TIMxCLK = 72 MHz, Prescaler = 0x0, TIMx counter clock = 72 MHz
    //TIMx ARR Register = 0 => TIMx Frequency = TIMx counter clock/(ARR + 1)
    //TIMx Frequency = 72MHz.
nPDTemp =  72000000UL/PulseFrequency; //?ü???????±×??????í 72000000UL?°TIM_Prescler
 //??TIM_Period????????0xFFFF
// ?±?ù????,????PWM?????¨?±?÷-TIM1
/* Time base configuration */ 
TIM_TimeBaseStructure.TIM_Period = nPDTemp-1; //?è???????????ü??????×°????????×?????×°???????÷????????
TIM_TimeBaseStructure.TIM_Prescaler = 0; //?è??????×÷??TIMx?±?????????????¤·?????
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //?è???±??·???:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM?ò??????????
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; 
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //?ù??TIM_TimeBaseInitStruct?????¨????????????TIM1???±???ù??????
//??????TIM1 Channel1 PWM????
/* PWM1 Mode configuration: Channel1 */    
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;// ?????¨?±?÷????:TIM?????í???÷??????1
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //????????:TIM????±?????????
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±???????????
TIM_OCInitStructure.TIM_Pulse = nPDTemp>>1;//50% //CCR1_Val/(TIM_Period+1)/2=nPDTemp/(nPDTemp-1+1)/2=0.5
TIM_OC1Init(TIM1, &TIM_OCInitStructure); //?ù?????¨???????????????èTIM1 OC1
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //????TIM1??CCR1?????¤×°???????÷
TIM_ARRPreloadConfig(TIM1, ENABLE); //????TIM1

// ?±?ù????,?????????????÷-TIM2
TIM_TimeBaseStructure.TIM_Period = 0xFFFF;     
TIM_TimeBaseStructure.TIM_Prescaler = 0; 
TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; 
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 
// Output Compare Active Mode configuration: Channel1
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Inactive; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_Pulse = 0xFFFF;//?????????????????ó
TIM_OC1Init(TIM2, &TIM_OCInitStructure); 

// ????TIM1???÷?¨?±?÷
// Select the Master Slave Mode 
TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable); 
// Master Mode selection  
TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update); 
//  ????TIM2?????¨?±?÷ 
// Slave Mode selection: TIM2
TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Gated); 
TIM_SelectInputTrigger(TIM2, TIM_TS_ITR0); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
TIM_ITRxExternalClockConfig(TIM2, TIM_TS_ITR0);////////????????ITR0?????ò??????×???/////////////??????????????????????????????????????
TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);  
TIM_Cmd(TIM1, DISABLE); 
TIM_Cmd(TIM2, DISABLE); 


void syringe_Output_Pulse(u16 Num)
{
TIM2->CCR1 = Num; 
TIM2->CNT = 0; 
TIM_Cmd(TIM2, ENABLE); 
TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE); 
TIM_Cmd(TIM1, ENABLE); 
TIM1_Pulse_TIM2_Counter_OK = 1;
}

用TIM3输出PWM没有问题,改成TIM1时仿真有,下载到板子上就没了,现在PE9悬空,不是硬件上被置0。
哪位碰到过同样的问题,请帮下忙。谢了。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-1-22
在线时间
0 小时
 楼主| 发表于 2014-1-22 15:02:05 | 显示全部楼层
把重映射去掉,用PA8,仿真有,但实际测的时候还是没有。
下载没问题,开关其他的IO口都有反应。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-1-22 15:27:38 | 显示全部楼层
回复【2楼】terminator2013:
---------------------------------
是不是外围的器件干扰引起的,强制性拉低这个管脚
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-1-22
在线时间
0 小时
 楼主| 发表于 2014-1-22 15:30:50 | 显示全部楼层
应该不是,现在这个脚悬空着。
我改成TIM1——CH2,测PA9,输出正常。
用TIM1——CH1,不管是否映射,仿真都正常,但下载后PA8,PE9都是低电平。
回复 支持 反对

使用道具 举报

26

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
689
金钱
689
注册时间
2014-3-4
在线时间
96 小时
发表于 2014-4-17 16:14:16 | 显示全部楼层
回复【3楼】Badu_Space:
---------------------------------
为啥仿真上的波周期是1us,但示波器上显示的周期却变成了180ms呢?
回复 支持 反对

使用道具 举报

26

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
689
金钱
689
注册时间
2014-3-4
在线时间
96 小时
发表于 2014-4-17 16:33:59 | 显示全部楼层
会不会是板子上的晶振有问题呢?
回复 支持 反对

使用道具 举报

26

主题

141

帖子

0

精华

高级会员

Rank: 4

积分
689
金钱
689
注册时间
2014-3-4
在线时间
96 小时
发表于 2014-4-17 16:36:31 | 显示全部楼层
这个程序里有个波的周期是2.5ms,仿真和示波器的输出都是正确的,其它周期为1us的波输出全是180ms.这是为什么啊
回复 支持 反对

使用道具 举报

12

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2014-12-28
在线时间
6 小时
发表于 2015-8-13 08:13:44 | 显示全部楼层
楼主我也遇见这个问题了。求解答
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 21:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表