OpenEdv-开源电子网

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

STM32F407无法使用映射怎么解决?固件库中也无定义,该怎么办,求助

[复制链接]

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-2-19
在线时间
8 小时
发表于 2019-2-19 16:36:41 | 显示全部楼层 |阅读模式
1金钱
最近在使用STM32F407定时器TIM1时,想利用PE9、10、13、14四个引脚输出PWM,结果发现没有输出,
然后查资料看到这四个脚需要完全映射上,于是改了下程序,结果发现固件库中无映射定义,程序无法使用AFIO时钟及完全映射的函数

固件库都是在这下的,看了下别人的都能用,想问问是什么原因,求原子哥和各路大神支援!

最佳答案

查看完整内容[请看2#楼]

F4没有所谓的重映射,你设置正确的复用功能即可。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-2-19 16:36:42 | 显示全部楼层
F4没有所谓的重映射,你设置正确的复用功能即可。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-2-19
在线时间
8 小时
 楼主| 发表于 2019-2-19 17:08:07 | 显示全部楼层
求助求助
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-2-19
在线时间
8 小时
 楼主| 发表于 2019-2-19 17:21:13 | 显示全部楼层
void TIM1_PWM_Init(u32 arr,u32 psc)       
{                                                          
        //´Ë²¿·ÖÐèÊÖ¶¯ÐÞ¸ÄIO¿ÚÉèÖÃ
       
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);          //TIM1ʱÖÓʹÄÜ   
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);         //ʹÄ&#220ORTEʱÖÓ
       
        GPIO_PinAFConfig(GPIOE,GPIO_PinSource9|GPIO_PinSource11|GPIO_PinSource13|GPIO_PinSource14,GPIO_AF_TIM1); //GPIOE9\11\13\14¸´ÓÃΪ¶¨Ê±Æ÷1
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_14;  //GPIOE9\11\13\14
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //¸´Óù¦ÄÜ               
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;        //ËÙ¶È100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //ÍÆÍ츴ÓÃÊä³ö
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //ÉÏÀ­
        GPIO_Init(GPIOE,&GPIO_InitStructure);              //³õʼ»&#175E9\11\13\14
          
        TIM_TimeBaseStructure.TIM_Prescaler=psc;  //¶¨Ê±Æ÷·ÖƵ
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽ
        TIM_TimeBaseStructure.TIM_Period=arr;   //×Ô¶¯ÖØ×°ÔØÖµ
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//³õʼ»¯¶¨Ê±Æ÷1
       
        //³õʼ»¯TIM1 Channel1¡¢2¡¢3¡¢4 PWMģʽ         
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //Ñ¡Ôñ¶¨Ê±Æ÷ģʽ:TIMÂö³å¿í¶Èµ÷ÖÆÄ£Ê½2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±È½ÏÊä³öʹÄÜ
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //Êä³ö¼«ÐÔ:TIMÊä³ö±È½Ï¼«ÐÔµÍ
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //¸ù¾ÝTÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIM1 4OC1
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);  //¸ù¾ÝTÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIM1 4OC2
        TIM_OC3Init(TIM1, &TIM_OCInitStructure);  //¸ù¾ÝTÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIM1 4OC3
        TIM_OC4Init(TIM1, &TIM_OCInitStructure);  //¸ù¾ÝTÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIM1 4OC4

        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //ʹÄÜTIM1ÔÚCCR1ÉϵÄÔ¤×°ÔØ¼Ä´æÆ÷
        TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);  //ʹÄÜTIM1ÔÚCCR2ÉϵÄÔ¤×°ÔØ¼Ä´æÆ÷
        TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);  //ʹÄÜTIM1ÔÚCCR3ÉϵÄÔ¤×°ÔØ¼Ä´æÆ÷
        TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);  //ʹÄÜTIM1ÔÚCCR4ÉϵÄÔ¤×°ÔØ¼Ä´æÆ÷

  TIM_ARRPreloadConfig(TIM1,ENABLE);//ARPEʹÄÜ
       
        TIM_Cmd(TIM1, ENABLE);  //ʹÄÜTIM1

                                                                                  
}
上面这是不加重映射的代码
加了  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE)        ;
        GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE);
后发现RCC_APB2Periph_AFIO、GPIO_PinRemapConfig、GPIO_FullRemap_TIM1都没定义,在固件库gpio.c和rcc.c中都没找到相关定义,这部分是要自己写吗?
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-2-19
在线时间
8 小时
 楼主| 发表于 2019-2-20 14:04:29 | 显示全部楼层
正点原子 发表于 2019-2-19 16:36
F4没有所谓的重映射,你设置正确的复用功能即可。

哦,难怪,谢谢原子哥!
查资料发现高级定时器要想输出PWM,得使能主输出,今天我在原程序中加了一句
TIM_CtrlPWMOutputs(TIM1,ENABLE);
发现可以TIM1ch4输出正常,其他三路还是没有输出,同样的语法加到TIM8里,就可以有四路输出,这是为什么呢?复用引脚设置应该都没问题
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10571
金钱
10571
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-2-20 15:00:17 | 显示全部楼层
wizard007 发表于 2019-2-20 14:04
哦,难怪,谢谢原子哥!
查资料发现高级定时器要想输出PWM,得使能主输出,今天我在原程序中加了一句
T ...

现在TIM1进行4路PWM输出成功了没?
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-2-19
在线时间
8 小时
 楼主| 发表于 2019-2-20 15:22:16 | 显示全部楼层
peng1554 发表于 2019-2-20 15:00
现在TIM1进行4路PWM输出成功了没?

还没有,只有CH4有输出
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10571
金钱
10571
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-2-20 15:47:24 | 显示全部楼层
wizard007 发表于 2019-2-20 15:22
还没有,只有CH4有输出

用的407ZGT6芯片不?
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-2-19
在线时间
8 小时
 楼主| 发表于 2019-2-20 16:24:38 | 显示全部楼层
peng1554 发表于 2019-2-20 15:47
用的407ZGT6芯片不?

对的,是ZGT6
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10571
金钱
10571
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-2-20 18:49:55 | 显示全部楼层

这个程序我这边测试4路PWM输出正常

探索者 TIM1(CH1CH2CH3CH4)-PE9PE11PE13PE14输出PWM.rar

3.02 MB, 下载次数: 55

回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-2-19
在线时间
8 小时
 楼主| 发表于 2019-2-21 11:50:27 | 显示全部楼层
peng1554 发表于 2019-2-20 18:49
这个程序我这边测试4路PWM输出正常

感谢大神,程序在我这也能用,只不过就是不知道同样的用法为什么在我的程序里还是不行,就算是复制粘贴也没用,而我把我的沾到您发的程序里就可以
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10571
金钱
10571
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-2-21 14:56:55 | 显示全部楼层
wizard007 发表于 2019-2-21 11:50
感谢大神,程序在我这也能用,只不过就是不知道同样的用法为什么在我的程序里还是不行,就算是 ...

应该还是你程序哪里没设置对
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-2-19
在线时间
8 小时
 楼主| 发表于 2019-2-21 16:06:58 | 显示全部楼层
peng1554 发表于 2019-2-21 14:56
应该还是你程序哪里没设置对

应该是,我好好检查检查,再次感谢
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-2-19
在线时间
8 小时
 楼主| 发表于 2019-2-26 09:46:04 | 显示全部楼层
peng1554 发表于 2019-2-21 14:56
应该还是你程序哪里没设置对

大神,我找到问题所在了,是我的usart1设置的问题,我设置成了复用PA9PA10(原本TIM1ch2\ch3对应的引脚),然后导致TIM1复用PE9、11、13的时候无输出、PE14有,但现在问题是我需要同时用usart1以及TIM1,引脚也要用已经对应好了引脚,想问下用F4库函数可否正常配置,F4无映射是否意味着这种用法不可行呢?我用stm32cubeMX设置pinout&configruation的时候,发现我的用法并没有冲突,就是不知道为什么用库函数写就不行?
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-2-19
在线时间
8 小时
 楼主| 发表于 2019-2-27 15:19:39 | 显示全部楼层
正点原子 发表于 2019-2-19 16:36
F4没有所谓的重映射,你设置正确的复用功能即可。

原子哥,请问要是F4没有重映射功能,那当需要同时使用usart1(PA8、9)以及TIM1(PE9、11、13、14)时,复用完结果起冲突,导致TIM1的PE9、11、13脚无输出、PE14正常怎么办?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2019-10-24
在线时间
5 小时
发表于 2019-10-24 14:44:01 | 显示全部楼层
我也碰到同样的问题 求解答
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 17:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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