OpenEdv-开源电子网

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

103ZET6定时器1产生PWM时,引脚 完全重映射后,CH1不能输出,CH2 CH3 CH4正常,求解答

[复制链接]

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2018-4-16
在线时间
11 小时
发表于 2018-6-3 23:18:30 | 显示全部楼层 |阅读模式
5金钱
代码如下,主函数 中主要是初始化和 产生P波的程序:
  定时器初始化的函数如下:

void TIM1_PWM_Init(u16 arr,u16 psc)
{  
GPIO_InitTypeDef          GPIO_InitStructure;
TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
TIM_OCInitTypeDef         TIM_OCInitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟
GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE);  

   //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOB.0  CH1 B.01
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIO

TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

   //初始化TIM1
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

//初始化TIM3 Channel2 PWM模式  
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高

TIM_OC4Init(TIM1, &TIM_OCInitStructure);  //根
TIM_OC3Init(TIM1, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM
TIM_OC2Init(TIM1, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM
TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM

  TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);  //使能TIM在CCR4上的预装载寄存器
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);  //使能TIM在CCR3上的预装载寄存器
  TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);  //使能TIM在CCR3上的预装载寄存器
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //使能TIM在CCR3上的预装载寄存器

TIM_CtrlPWMOutputs(TIM1, ENABLE);
TIM_Cmd(TIM1, ENABLE);  //使能TIM
}


四个通道使用PWM的语句分别一句:
TIM_SetCompare1 (TIM1 ,500 );
TIM_SetCompare2 (TIM1 ,500 );
TIM_SetCompare3 (TIM1 ,500 );
  TIM_SetCompare4 (TIM1 ,500 );

产生的现象是:
经电压表测量后
CH1 不能产生PWM,CH2 CH3 CH4 正常,求各位网友帮忙看下,谢谢了


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-6-4 01:45:21 | 显示全部楼层
不重映射,1~4输出正常么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-10-28
在线时间
14 小时
发表于 2018-6-4 07:47:14 | 显示全部楼层
貌似TIM1 CH1有点不一样,忘记了
回复

使用道具 举报

27

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
344
金钱
344
注册时间
2018-2-1
在线时间
71 小时
发表于 2018-6-4 08:30:23 | 显示全部楼层
你先确定是不是那个IO口本来就是坏了,
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2018-4-16
在线时间
11 小时
 楼主| 发表于 2018-6-4 09:07:31 | 显示全部楼层
yonnhor 发表于 2018-6-4 08:30
你先确定是不是那个IO口本来就是坏了,

单独调试I/O,没有问题,我已经试过了。
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-9-13
在线时间
4 小时
发表于 2018-6-4 15:47:26 | 显示全部楼层
TIM1->BDTR |= 1<<15;       //TIM1要这么一句才可以输出PWM
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 11:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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