OpenEdv-开源电子网

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

F407寄存器死区设置问题?

[复制链接]

3

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2016-7-28
在线时间
36 小时
发表于 2016-9-6 08:25:27 | 显示全部楼层 |阅读模式
1金钱
各位大神,帮忙看一下,此程序不好使,不能输出PWM波?我用的是STM32F407ZGT6,寄存器版,我参考咱们群里的法F103精华帖改的,不知道哪里出错了! 00.png 11.png 22.png

//定时器8产生6路PWM实验  
//通过定时器的PWM2模式,在PA7、PC6~PC8、PB0、PB1,输出6路PWM
//输出互补PWM+死区
#include "sys.h"
#include "delay.h"
//端口宏定义
#define LED0 PFout(9)   //DS0
void TIM8_PWM_Init(u16 arr,u16 psc);
//定义IO口,和外部硬件连接
void LED_Init(void)
{
        RCC->AHB1ENR|=1<<5;//使能PORTF时钟
        GPIO_Set(GPIOF,PIN9,GPIO_MODE_OUT,GPIO_OTYPE_PP,
                GPIO_SPEED_100M,GPIO_PUPD_PU);//PF9,PF10设置
        LED0=1;//LED0关闭
}
//TIM8 PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM8_PWM_Init(u16 arr,u16 psc)
{
    //此部分需手动修改IO口设置
        RCC->APB2ENR|=1<<1;   //外设时钟使能寄存器,TIM8时钟使能
        RCC->AHB1ENR|=1<<0;   //外设时钟使能寄存器,IO端口A时钟使能
        RCC->AHB1ENR|=1<<1;   //外设时钟使能寄存器,IO端口B时钟使能
        RCC->AHB1ENR|=1<<2;   //外设时钟使能寄存器,IO端口C时钟使能
        GPIO_Set(GPIOA,PIN7,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
        GPIO_Set(GPIOB,PIN0|PIN1,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
        GPIO_Set(GPIOC,PIN6|PIN7|PIN8,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
        GPIO_AF_Set(GPIOA,7,3);//把IO口PA7,设置成复用AF3(TIM8)
        GPIO_AF_Set(GPIOB,0,3);//把IO口PB0,设置成复用AF3(TIM8)
        GPIO_AF_Set(GPIOB,1,3);//把IO口PB1,设置成复用AF3(TIM8)
        GPIO_AF_Set(GPIOC,6,3);//把IO口PC6,设置成复用AF3(TIM8)
        GPIO_AF_Set(GPIOC,7,3);//把IO口PC7,设置成复用AF3(TIM8)
        GPIO_AF_Set(GPIOC,8,3);//把IO口PC8,设置成复用AF3(TIM8)
       
        TIM8->ARR=arr;   //设定计数器自动重装值
        TIM8->PSC=psc;   //预分频器
       
        TIM8->CCER|=1<<0;   //TIM8CH1 输出使能       
        TIM8->CCER|=1<<2;   //TIM8CH1N 输出使能
       
        TIM8->CCER|=1<<4;   //TIM8CH2 输出使能
        TIM8->CCER|=1<<6;   //TIM8CH2N 输出使能       
       
        TIM8->CCER|=1<<8;   //TIM8CH3 输出使能
        TIM8->CCER|=1<<10;   //TIM8CH3N 输出使能
       
       
        TIM8->CCMR1|=7<<4;          //CH1 PWM2模式                 
        TIM8->CCMR1|=1<<3;                 //CH1预装载使能         
        TIM8->CCMR1|=7<<12;          //CH2 PWM2模式                 
        TIM8->CCMR1|=1<<11;         //CH2预装载使能         
        TIM8->CCMR2|=7<<4;          //CH3 PWM2模式                 
        TIM8->CCMR2|=1<<3;                 //CH3预装载使能         

        TIM8->BDTR|=1<<15;   //只有高级定时器需要设置MOE主输出使能
        TIM8->BDTR|=0x14;    //死区时间设置,2ms

        TIM8->CR1|=1<<7;    //ARPE使能
        TIM8->CR1|=1<<0;    //使能定时器8
}
int main(void)
{  
        Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz
        delay_init(168);                    //延时初始化
        LED_Init();       
        TIM8_PWM_Init(500-1,8400-1);//1MHz的计数频率,50ms的PWM
           while(1)
        {
                delay_ms(200);       
                LED0=!LED0;
                TIM8->CCR1=250;//占空比50%,低电平时长25ms
                TIM8->CCR2=125;//占空比25%,
                TIM8->CCR3=50; //占空比10%,
        }
}




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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 11:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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