OpenEdv-开源电子网

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

我想设置22路PWM波,但是只有两路波形出来,其他没有波形。有没有大神解答一下啊

[复制链接]

4

主题

13

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-3-14
在线时间
5 小时
发表于 2017-3-16 17:00:58 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-3-14
在线时间
5 小时
 楼主| 发表于 2017-3-16 17:01:41 | 显示全部楼层
int main(void)
{       


                /* 初始化 */
        USART3_Config();                   /* 初始化串口:115200 8-N-1 */
  PWM_CONFIG();                                        /*配置PWM输出端口*/


while(1)
        {

          /////测试pwm波/////
               
                {p11();}
                        {p12();}
                        {p21();}
                        {p22();}
                {p41();}
                        {p42();}
                        {p113();}
                       
                        {p31();}
                        {p32();}   
                        {p51();}
                        {p52();}
                        {p61();}
                        {p62();}
                        {p71();}
                        {p72();}
                        {p81();}
                        {p82();}
                        {p91();}
                        {p92();}
                        {p101();}
                        {p102();}
                        {p111();}
                        {p112();}         
        //        {p113();} //
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-3-14
在线时间
5 小时
 楼主| 发表于 2017-3-16 17:09:02 | 显示全部楼层
yyuu 发表于 2017-3-16 17:01
int main(void)
{       

void PWM_CONFIG(void)
{  
   GPIO_InitTypeDef GPIO_InitStructure;
   
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2|RCC_APB1Periph_TIM3|RCC_APB1Periph_TIM4|RCC_APB1Periph_TIM5, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1|RCC_APB2Periph_TIM8, ENABLE);

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC||RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);
  
   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    // 复用推挽输出
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);

   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
   GPIO_PinRemapConfig (GPIO_FullRemap_TIM2,ENABLE);
   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10|GPIO_Pin_11;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-3-14
在线时间
5 小时
 楼主| 发表于 2017-3-16 17:09:29 | 显示全部楼层
yyuu 发表于 2017-3-16 17:09
void PWM_CONFIG(void)
{  
   GPIO_InitTypeDef GPIO_InitStructure;


   GPIO_InitStructure.GPIO_Pin =  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(GPIOC, &GPIO_InitStructure);

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
   GPIO_PinRemapConfig (GPIO_Remap_TIM4,ENABLE);  
   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOD, &GPIO_InitStructure);
   

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
   GPIO_PinRemapConfig (GPIO_FullRemap_TIM1,ENABLE);
   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOE, &GPIO_InitStructure);

   
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
   GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
   GPIO_PinRemapConfig (GPIO_FullRemap_TIM2,ENABLE);
   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);        

   
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-3-14
在线时间
5 小时
 楼主| 发表于 2017-3-16 17:10:01 | 显示全部楼层
yyuu 发表于 2017-3-16 17:09
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
   GPIO_InitStru ...

void p11(void) //pa8
{  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   TIM_OCInitTypeDef  TIM_OCInitStructure;
   TIM_TimeBaseStructure.TIM_Period = f;      
   TIM_TimeBaseStructure.TIM_Prescaler = 0;            
   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;       
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  

   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
   TIM_OCInitStructure.TIM_Pulse = CCR_Val;       
   TIM_OC1Init(TIM1, &TIM_OCInitStructure);         
   TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
   TIM_ARRPreloadConfig(TIM1, ENABLE);                       
   TIM_Cmd(TIM1, ENABLE);                                                                       
   TIM_CtrlPWMOutputs(TIM1,ENABLE);
}                         
void p12(void) //pa9
{  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   TIM_OCInitTypeDef  TIM_OCInitStructure;
   TIM_TimeBaseStructure.TIM_Period = f;      
   TIM_TimeBaseStructure.TIM_Prescaler = 0;            
   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;       
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  

   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
   TIM_OCInitStructure.TIM_Pulse = CCR_Val;       
   TIM_OC1Init(TIM1, &TIM_OCInitStructure);         
   TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
   TIM_ARRPreloadConfig(TIM1, ENABLE);                       
   TIM_Cmd(TIM1, ENABLE);                                                                       
   TIM_CtrlPWMOutputs(TIM1,ENABLE);   
}                                                                       
void p21(void)        //pa10
{  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   TIM_OCInitTypeDef  TIM_OCInitStructure;
   TIM_TimeBaseStructure.TIM_Period = f;      
   TIM_TimeBaseStructure.TIM_Prescaler = 0;            
   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;       
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  

   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
   TIM_OCInitStructure.TIM_Pulse = CCR_Val;       
   TIM_OC3Init(TIM1, &TIM_OCInitStructure);         
   TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
   TIM_ARRPreloadConfig(TIM1, ENABLE);                       
   TIM_Cmd(TIM1, ENABLE);                                                                       
   TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void p22(void)
{ TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   TIM_OCInitTypeDef  TIM_OCInitStructure;
   TIM_TimeBaseStructure.TIM_Period = f;      
   TIM_TimeBaseStructure.TIM_Prescaler = 0;            
   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;       
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  

   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
   TIM_OCInitStructure.TIM_Pulse = CCR_Val;       
   TIM_OC4Init(TIM1, &TIM_OCInitStructure);         
   TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
   TIM_ARRPreloadConfig(TIM1, ENABLE);                       
   TIM_Cmd(TIM1, ENABLE);                                                                       
   TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-3-14
在线时间
5 小时
 楼主| 发表于 2017-3-16 17:10:29 | 显示全部楼层
yyuu 发表于 2017-3-16 17:10
void p11(void) //pa8
{  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   TIM_OCInitTypeDef  TI ...

void p31(void)
{  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   TIM_OCInitTypeDef  TIM_OCInitStructure;
   TIM_TimeBaseStructure.TIM_Period = f;      
   TIM_TimeBaseStructure.TIM_Prescaler = 0;            
   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;       
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  

   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
   TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
   TIM_OCInitStructure.TIM_Pulse = CCR_Val;       
   TIM_OC3Init(TIM8, &TIM_OCInitStructure);         
   TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Enable);
   TIM_ARRPreloadConfig(TIM8, ENABLE);                       
   TIM_Cmd(TIM8, ENABLE);                                                                       
   TIM_CtrlPWMOutputs(TIM8,ENABLE);
}
void p32(void)
{  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   TIM_OCInitTypeDef  TIM_OCInitStructure;
   TIM_TimeBaseStructure.TIM_Period = f;      
   TIM_TimeBaseStructure.TIM_Prescaler = 0;            
   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;       
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  

   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
   TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
   TIM_OCInitStructure.TIM_Pulse = CCR_Val;       
   TIM_OC4Init(TIM8, &TIM_OCInitStructure);         
   TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable);
   TIM_ARRPreloadConfig(TIM8, ENABLE);                       
   TIM_Cmd(TIM8, ENABLE);                                                                       
   TIM_CtrlPWMOutputs(TIM8,ENABLE);
}         
void p41(void)
{  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   TIM_OCInitTypeDef  TIM_OCInitStructure;
   TIM_TimeBaseStructure.TIM_Period = f;      
   TIM_TimeBaseStructure.TIM_Prescaler = 0;            
   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;       
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                  
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
         
   TIM_OCInitStructure.TIM_Pulse = CCR_Val;       
   TIM_OC3Init(TIM2, &TIM_OCInitStructure);         
   TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
   TIM_ARRPreloadConfig(TIM2, ENABLE);               
   TIM_Cmd(TIM2, ENABLE);                                                                      
   TIM_CtrlPWMOutputs(TIM2,ENABLE);
}
void p42(void)
{  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   TIM_OCInitTypeDef  TIM_OCInitStructure;
   TIM_TimeBaseStructure.TIM_Period = f;      
   TIM_TimeBaseStructure.TIM_Prescaler = 0;            
   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;       
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                  
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
         
   TIM_OCInitStructure.TIM_Pulse = CCR_Val;       
   TIM_OC4Init(TIM2, &TIM_OCInitStructure);         
   TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
   TIM_ARRPreloadConfig(TIM2, ENABLE);               
   TIM_Cmd(TIM2, ENABLE);                                                                      
   TIM_CtrlPWMOutputs(TIM2,ENABLE);
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-16 23:10:26 | 显示全部楼层
你先搞出一个定时器的四路出来吧。
你这种代码写法,真是初学者的写法。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2017-3-14
在线时间
5 小时
 楼主| 发表于 2017-4-11 18:34:57 | 显示全部楼层
正点原子 发表于 2017-3-16 23:10
你先搞出一个定时器的四路出来吧。
你这种代码写法,真是初学者的写法。。。

我用PE14重映射TIM1_CH4后,TIM1的其他三个通道都不能输出PWM波,如果把PE14注释掉其他三个通道就可以,这是为什么啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-4-11 22:08:03 | 显示全部楼层
yyuu 发表于 2017-4-11 18:34
我用PE14重映射TIM1_CH4后,TIM1的其他三个通道都不能输出PWM波,如果把PE14注释掉其他三个通道就可以, ...

不重映射,可以输出4路么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-22 05:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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