OpenEdv-开源电子网

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

TIM3部分重映射通道1输出不了PWM,但是通道2可以输出PWM

[复制链接]

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2015-8-18 12:32:28 | 显示全部楼层 |阅读模式
5金钱
void TIM_PWM_Init(uint16_t arr, uint16_t psc)
{
GPIO_InitTypeDef  GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE); 

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler = psc; 
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 

TIM_OC1Init(TIM3, &TIM_OCInitStructure); 
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); 
TIM_OC2Init(TIM3, &TIM_OCInitStructure);  
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); 
TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  
TIM_OC4Init(TIM3, &TIM_OCInitStructure); 
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_OC1Init(TIM4, &TIM_OCInitStructure); 
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);  
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_OC3Init(TIM4, &TIM_OCInitStructure);  
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);  
TIM_OC4Init(TIM4, &TIM_OCInitStructure); 
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); 

TIM_Cmd(TIM3, ENABLE); 
TIM_Cmd(TIM4, ENABLE); 
}

int main(void)
{
delay_init();
LED_Init();
LED_Open(1);
LCD_SPI2_Init();
NVIC_Configuration(); //中断分组
TIM_PWM_Init(19999, 71);//72000000/((19999+1)*(71+1))=50Hz
while(1)
{
TIM_SetCompare1(TIM3,1300);//PB4
TIM_SetCompare2(TIM3,1700);//PB5
TIM_SetCompare3(TIM3,1300);//PB0
TIM_SetCompare4(TIM3,1700);//PB1

TIM_SetCompare1(TIM4,1300);//PB6
TIM_SetCompare2(TIM4,1700);//PB7
TIM_SetCompare3(TIM4,1300);//PB8
TIM_SetCompare4(TIM4,1700);//PB9

LCD_SPI2_P8x16Str(48,6,"OLED");

}
}

我用这个程序来控制舵机,舵机是同一个舵机,所以舵机没有问题,但是就是PB4的接口舵机不能动。我用的是STM32F103VCT6的芯片,100个引脚的。特来请教。

最佳答案

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

要用PB4, 禁止JTAG先
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-18 12:32:29 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
 楼主| 发表于 2015-8-18 14:02:30 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,我加上了这一句,好像还是不行。
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure1;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//加上了这一句,我用的是JTAG下载

GPIO_InitStructure1.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure1);
}
灯还是不闪烁
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
 楼主| 发表于 2015-8-18 14:12:11 | 显示全部楼层
void LED_Init(void) 

GPIO_InitTypeDef GPIO_InitStructure1; 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//忘记加了这一个,忘开AFIO时钟了!!!
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//加上了这一句,我用的是JTAG下载 

GPIO_InitStructure1.GPIO_Pin = GPIO_Pin_4; 
GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_Out_PP; 
GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_Init(GPIOB, &GPIO_InitStructure1); 

谢谢原子哥,问题解决了,是我太粗心了,忘开AFIO时钟就直接禁用了JTAG,所以不行。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
 楼主| 发表于 2015-8-18 14:18:23 | 显示全部楼层
现在我把我改好的程序重新贴出来,方便有同样问题的坛友,也为原子哥减轻一下工作压力,哈哈
 void TIM_PWM_Init(uint16_t arr, uint16_t psc)
{
GPIO_InitTypeDef  GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE); //开引脚复用AFIO时钟

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//加上了这一句,禁用JTAG,我用的是JTAG下载

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);//开TIM3部分重映射

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler = psc; 
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 

TIM_OC1Init(TIM3, &TIM_OCInitStructure); 
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); 
TIM_OC2Init(TIM3, &TIM_OCInitStructure);  
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); 
TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  
TIM_OC4Init(TIM3, &TIM_OCInitStructure); 
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_OC1Init(TIM4, &TIM_OCInitStructure); 
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);  
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_OC3Init(TIM4, &TIM_OCInitStructure);  
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);  
TIM_OC4Init(TIM4, &TIM_OCInitStructure); 
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); 

TIM_Cmd(TIM3, ENABLE); 
TIM_Cmd(TIM4, ENABLE); 
}

int main(void)
{
delay_init();
LED_Init();
LED_Open(1);
LCD_SPI2_Init();
NVIC_Configuration(); //中断分组
TIM_PWM_Init(19999, 71);//72000000/((19999+1)*(71+1))=50Hz
while(1)
{
TIM_SetCompare1(TIM3,1300);//PB4
TIM_SetCompare2(TIM3,1700);//PB5
TIM_SetCompare3(TIM3,1300);//PB0
TIM_SetCompare4(TIM3,1700);//PB1

TIM_SetCompare1(TIM4,1300);//PB6
TIM_SetCompare2(TIM4,1700);//PB7
TIM_SetCompare3(TIM4,1300);//PB8
TIM_SetCompare4(TIM4,1700);//PB9

LCD_SPI2_P8x16Str(48,6,"OLED");

}
}
想控制舵机的同学了也可参考一下这个程序,在原子哥前献丑了。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2015-8-18 16:29:19 | 显示全部楼层
谢谢分享。。。。
小小蜗牛
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-5-12
在线时间
0 小时
发表于 2015-10-19 17:57:35 | 显示全部楼层
 void TIM_PWM_Init(uint16_t arr, uint16_t psc) 

GPIO_InitTypeDef  GPIO_InitStructure; 
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; 
TIM_OCInitTypeDef  TIM_OCInitStructure; 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE); //开引脚复用AFIO时钟 

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//加上了这一句,禁用JTAG,我用的是JTAG下载 

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);//开TIM3部分重映射 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_Init(GPIOB, &GPIO_InitStructure); 

TIM_TimeBaseStructure.TIM_Period = arr; 
TIM_TimeBaseStructure.TIM_Prescaler = psc;  
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); 

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;  
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  

TIM_OC1Init(TIM3, &TIM_OCInitStructure);  
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  
TIM_OC2Init(TIM3, &TIM_OCInitStructure);   
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  
TIM_OC3Init(TIM3, &TIM_OCInitStructure); 
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);   
TIM_OC4Init(TIM3, &TIM_OCInitStructure);  
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); 

TIM_OC1Init(TIM4, &TIM_OCInitStructure);  
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);   
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); 
TIM_OC3Init(TIM4, &TIM_OCInitStructure);   
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);   
TIM_OC4Init(TIM4, &TIM_OCInitStructure);  
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);  

TIM_Cmd(TIM3, ENABLE);  
TIM_Cmd(TIM4, ENABLE);  


int main(void) 

delay_init(); 
LED_Init(); 
LED_Open(1); 
LCD_SPI2_Init(); 
NVIC_Configuration(); //中断分组 
TIM_PWM_Init(19999, 71);//72000000/((19999+1)*(71+1))=50Hz 
while(1) 

TIM_SetCompare1(TIM3,1300);//PB4 
TIM_SetCompare2(TIM3,1700);//PB5 
TIM_SetCompare3(TIM3,1300);//PB0 
TIM_SetCompare4(TIM3,1700);//PB1 

TIM_SetCompare1(TIM4,1300);//PB6 
TIM_SetCompare2(TIM4,1700);//PB7 
TIM_SetCompare3(TIM4,1300);//PB8 
TIM_SetCompare4(TIM4,1700);//PB9 

LCD_SPI2_P8x16Str(48,6,"OLED"); 


}


我怎么 调不了啊
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
 楼主| 发表于 2015-10-24 00:00:19 | 显示全部楼层
回复【7楼】久爱霸气:
---------------------------------
这个我就不清楚了,我的项目上是这么写的,没问题。我遇到过的问题是有些垃圾舵机不接上拉电阻是驱动不起来的。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2018-7-9
在线时间
16 小时
发表于 2018-10-9 16:39:59 | 显示全部楼层
谢谢分享,不过少了一句"TIM_OC2Init(TIM4, &TIM_OCInitStructure); ",导致PB7不出波形
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2018-7-9
在线时间
16 小时
发表于 2018-10-9 16:41:21 | 显示全部楼层
wszdxmh 发表于 2015-8-18 14:18
现在我把我改好的程序重新贴出来,方便有同样问题的坛友,也为原子哥减轻一下工作压力,哈哈
 void&nb ...

谢谢分享,不过少了一句"TIM_OC2Init(TIM4, &TIM_OCInitStructure); ",导致PB7不出波形
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 15:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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