各位大神,帮忙看一下,此程序不好使,不能输出PWM波?我用的是STM32F407ZGT6,寄存器版,我参考咱们群里的法F103精华帖改的,不知道哪里出错了!
//定时器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%,
}
}
一周热门 更多>