OpenEdv-开源电子网

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

GPIOE无法输出PWM

[复制链接]

1

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2018-8-30
在线时间
3 小时
发表于 2018-8-30 16:52:27 | 显示全部楼层 |阅读模式
本帖最后由 Huaqiao 于 2018-8-30 18:47 编辑

使用TIM1基本相同的代码可以在GPIOA输出PWM,但是切换到GPIOE就不能输出了,也增加了TIM1完全重映射,请老师指点!

void TIM1_Configuration(void)
{


GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE|RCC_APB2Periph_TIM1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        
GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE);                                                                             
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);//使用 AFIO_MARP        

         
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13;                       //TIM1_CH2.CH3,CH4
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOE,&GPIO_InitStructure);

               
TIM_TimeBaseInitStructure.TIM_Period = 100; //设置自动重装载寄存器周期的值

TIM_TimeBaseInitStructure.TIM_Prescaler = 1437;//设置用来作为TIMx时钟频率预分频值
TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式
TIM_TimeBaseInit(TIM1, & TIM_TimeBaseInitStructure);

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM输出使能
//TIM_OCInitStructure.TIM_OutputState=TIM_OutputNState_Disable;  //PWM输出使能

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
//TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;
//TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;

TIM_OCInitStructure.TIM_Pulse=85;                                          //设置TIM1_CH2 占空比
TIM_OC2Init(TIM1,&TIM_OCInitStructure);



TIM_OCInitStructure.TIM_Pulse=50;                                       //设置TIM1_CH3 占空比
TIM_OC3Init(TIM1,&TIM_OCInitStructure);


TIM_OCInitStructure.TIM_Pulse=35;                                         //设置TIM1_CH4 占空比
TIM_OC4Init(TIM1,&TIM_OCInitStructure);





TIM_ARRPreloadConfig(TIM1,ENABLE);
TIM_Cmd(TIM1,ENABLE);
TIM_CtrlPWMOutputs(TIM1, ENABLE);                             //pwm输出        
        
        
        
//********************************************************************************************        
        
        
        
}

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

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2018-8-30
在线时间
3 小时
 楼主| 发表于 2018-8-30 18:46:30 | 显示全部楼层
经过测试,找到原因,程序中用到FSMC功能,其中RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);        妨碍了GPIOE输出PWM,只要去掉上述语句,PE11就能正常输出PWM。
有可能PE11-PE15默认为是FSMC功能,且具有最高的优先级。请高手测试一下,看如何解决这个问题,谢谢!
回复 支持 反对

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-8-30 19:43:32 | 显示全部楼层
我这边TIM1重映射到PE9,PE11,PE13,PE14,正常PWM输出,用的STM32F103ZET6,外接的8M晶振

战舰&精英(F103)TIM1完全重映射测试(PE9,PE11,PE13,PE14).rar

2.31 MB, 下载次数: 0

售价: 1 金钱  [记录]  [购买]

回复 支持 反对

使用道具 举报

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17784
金钱
17784
注册时间
2018-3-3
在线时间
523 小时
发表于 2018-8-31 10:02:05 | 显示全部楼层
Huaqiao 发表于 2018-8-30 18:46
经过测试,找到原因,程序中用到FSMC功能,其中RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);        妨碍了 ...

一般FSMC是LCD和内存用到了。你可以将PWM的初始化函数放到最后初始化。但是LCD和内存可能不正常了
/*
*
*
*
*
*
*/
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2018-8-30
在线时间
3 小时
 楼主| 发表于 2018-9-1 16:00:47 | 显示全部楼层
FSMC是和一个带内存的通讯芯片通讯的,这个芯片必须要可靠工作,根据官方的勘误书册,只能把TIM1的各个外设通道转移的PA口,重新设计PCB是肯定的了。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 05:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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