OpenEdv-开源电子网

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

STM32f407关于pwm单通道输出的问题

[复制链接]

16

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2020-3-5
在线时间
36 小时
发表于 2021-1-30 12:53:20 | 显示全部楼层 |阅读模式
5金钱
void SENIOR_TIMER_PWM_Init(u16 arr , u16 psc , u8 TIMEX,u8 CHX,u16 duty)
{
        TIM_TypeDef* TIMX;
        RCC->APB2ENR|=1<<TIMEX;                                                                                           //定时器时钟使能
        TIMX=(TIM_TypeDef*)(TIM1_BASE+TIMEX*0x400);                                                           //定时器寄存器的首地址
        TIMX->ARR=arr;                                                                                                             //自动重装载值
        TIMX->PSC=psc;                                                                                                             //预分频值
        TIMX->CR1|=0<<4;                                                                                                        //定时器向上计数模式
        switch(CHX)
        {
          case CH1:
                switch(TIMEX)
                {
                  case TIME1:
                        GPIO_init(IOA,8,AF_PP,SPEED_100HZ);                                                             //GPIO初始化复用功能 A8
                        GPIO_PinAF_Set(GPIOA,8,1);                                                                            //具体复用功能设置
                        break;
                  case TIME8:
                        GPIO_init(IOC,6,AF_PP,SPEED_100HZ);                                                             //GPIO初始化复用功能 C6
                        GPIO_PinAF_Set(GPIOC,6,3);                                                                           //具体复用功能设置
                        break;
                }
                TIMX->ARR=arr;                                                                                                    //自动重装载值
                TIMX->PSC=psc;                                                                                                    //预分频值
                TIMX->CR1|=0<<4;                                                                                               //定时器向上计数模式
                TIMX->CCMR1|=6<<4;                                                                                          //PWM1模式
                TIMX->CCER&=~(1<<1);                                                                                      //高电平有效
                TIMX->CCER|=1<<0;                                                                                            //通道输出使能
                TIMX->CCMR1|=1<<3;                                                                                         //使能预装载
                TIMX->CCR1=duty;                                                                                               //预装载值
                break;
          case CH2:
                switch(TIMEX)
                {
                  case TIME1:
                        GPIO_init(IOA,9,AF_PP,SPEED_100HZ);                                                          //GPIO初始化复用功能 A9
                        GPIO_PinAF_Set(GPIOA,9,1);                                                                        //具体复用功能设置
                        break;
                  case TIME8:
                        GPIO_init(IOC,7,AF_PP,SPEED_100HZ);                                                          //GPIO初始化复用功能 C7
                        GPIO_PinAF_Set(GPIOC,7,3);                                                                         //具体复用功能设置
                        break;  
                }
                TIMX->CCMR1|=1<<11;                                                                                       //使能预装载
                TIMX->CCMR1|=6<<12;                                                                                       //PWM1模式
                TIMX->CCER|=1<<4;                                                                                           //通道输出使能
                TIMX->CCER&=~(1<<5);                                                                                     //高电平有效
                TIMX->CCR2=duty;                                                                                              //预装载值
                break;
          case CH3:
                switch(TIMEX)
                {
                  case TIME1:
                        GPIO_init(IOA,10,AF_PP,SPEED_100HZ);                                                         //GPIO初始化复用功能 A10
                        GPIO_PinAF_Set(GPIOA,10,1);                                                                        //具体复用功能设置
                        break;
                  case TIME8:
                        GPIO_init(IOC,8,AF_PP,SPEED_100HZ);                                                           //GPIO初始化复用功能 C8
                        GPIO_PinAF_Set(GPIOC,8,3);                                                                         //具体复用功能设置
                        break;
                }
                TIMX->CCMR2|=1<<3;                                                                                          //使能预装载
                TIMX->CCMR2|=6<<4;                                                                                          //PWM1模式
                TIMX->CCER|=1<<8;                                                                                            //通道输出使能
                TIMX->CCER&=~(1<<9);                                                                                      //高电平有效
                TIMX->CCR3=duty;                                                                                               //预装载值
                break;
          case CH4:
                switch(TIMEX)
                {
                  case TIME1:
                        GPIO_init(IOA,11,AF_PP,SPEED_100HZ);                                                                 //GPIO初始化复用功能 A11
                        GPIO_PinAF_Set(GPIOA,11,1);                                                                               //具体复用功能设置
                        break;
                  case TIME8:
                        GPIO_init(IOC,9,AF_PP,SPEED_100HZ);                                                                  //GPIO初始化复用功能 C9
                        GPIO_PinAF_Set(GPIOC,9,3);                                                                                //具体复用功能设置
                        break;
                }
                TIMX->CCMR2|=1<<11;                                                                                             //使能预装载
                TIMX->CCMR2|=6<<12;                                                                                             //PWM1模式
                TIMX->CCER|=1<<12;                                                                                               //通道输出使能
                TIMX->CCER&=~(1<<13);                                                                                         //高电平有效
                TIMX->CCR4=duty;                                                                                                   //预装载值
                break;
        };
       
        TIMX->CR1|=1<<7;                                                                                                  //自动重载预装载使能TIMx_ARR寄存器进行缓冲
        TIMX->CR1|=1<<0;                                                                                                  //使能定时器
}
这个是pwm单通道输出的函数,我用的时候比如频率100KHZ,占空比为80%
但是出来上位机图像是

输出的波形完全不对,不知道有人能帮忙解答下吗

最佳答案

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

使用道具 举报

16

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2020-3-5
在线时间
36 小时
 楼主| 发表于 2021-1-30 12:53:21 | 显示全部楼层
回复

使用道具 举报

3

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2019-11-27
在线时间
87 小时
发表于 2021-2-22 10:25:43 | 显示全部楼层
你这是寄存器版本的?
回复

使用道具 举报

16

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2020-3-5
在线时间
36 小时
 楼主| 发表于 2022-1-16 20:00:07 | 显示全部楼层
Cheng0717 发表于 2021-2-22 10:25
你这是寄存器版本的?

嗯嗯
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 06:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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