基于stm32f407的pwm输出以及初始化(84mhz)
一.pwm的初始化
pwm.c
#include "pwm.h"
#include "led.h"
#include "usart.h"//TIM14 PWM²¿·Ö³õʼ»¯
//PWMÊä³ö³õʼ»¯
//arr£º×Ô¶¯ÖØ×°Öµ
//psc£ºÊ±ÖÓÔ¤·ÖƵÊý
void TIM14_PWM_Init(u32 arr,u32 psc) //
{ //´Ë²¿·ÖÐèÊÖ¶¯ÐÞ¸ÄIO¿ÚÉèÖÃGPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE); //TIM14ʱÖÓʹÄÜ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //ʹÄÜPORTFʱÖÓ GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //GPIOF9¸´ÓÃΪ¶¨Ê±Æ÷14GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //GPIOF9GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //¸´Óù¦ÄÜGPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //ËÙ¶È100MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍ츴ÓÃÊä³öGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //ÉÏÀGPIO_Init(GPIOF,&GPIO_InitStructure); //³õʼ»¯PF9TIM_TimeBaseStructure.TIM_Prescaler=psc; //¶¨Ê±Æ÷·ÖƵTIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽTIM_TimeBaseStructure.TIM_Period=arr; //×Ô¶¯ÖØ×°ÔØÖµTIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);//³õʼ»¯¶¨Ê±Æ÷14//³õʼ»¯TIM14 Channel1 PWMģʽ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //Ñ¡Ôñ¶¨Ê±Æ÷ģʽ:TIMÂö³å¿í¶Èµ÷ÖÆģʽ2 ͨµÀ1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±È½ÏÊä³öʹÄÜTIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //Êä³ö¼«ÐÔ:TIMÊä³ö±È½Ï¼«ÐÔ¸ßTIM_OC1Init(TIM14, &TIM_OCInitStructure); //¸ù¾ÝTÖ¸¶¨µÄ²ÎÊý³õʼ»¯Íâ333333333333333ÉèTIM1 4OC1TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); //ʹÄÜTIM14ÔÚCCR1ÉϵÄԤװÔؼĴæÆ÷TIM_ARRPreloadConfig(TIM14,ENABLE);//ARPEʹÄÜ TIM_Cmd(TIM14, ENABLE); //ʹÄÜTIM14} void TIM13_PWM_Init(u32 arr,u32 psc)
{ //´Ë²¿·ÖÐèÊÖ¶¯ÐÞ¸ÄIO¿ÚÉèÖÃGPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM13,ENABLE); //TIM13ʱÖÓʹÄÜ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //ʹÄÜPORTFʱÖÓ GPIO_PinAFConfig(GPIOF,GPIO_PinSource8,GPIO_AF_TIM13); //GPIOF8¸´ÓÃΪ¶¨Ê±Æ÷13GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //GPIOF8GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //¸´Óù¦ÄÜGPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //ËÙ¶È100MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍ츴ÓÃÊä³öGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //ÉÏÀGPIO_Init(GPIOF,&GPIO_InitStructure); //³õʼ»¯PF8TIM_TimeBaseStructure.TIM_Prescaler=psc; //¶¨Ê±Æ÷·ÖƵTIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽTIM_TimeBaseStructure.TIM_Period=arr; //×Ô¶¯ÖØ×°ÔØÖµTIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM13,&TIM_TimeBaseStructure);//³õʼ»¯¶¨Ê±Æ÷13//³õʼ»¯TIM13 Channel1 PWMģʽ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //Ñ¡Ôñ¶¨Ê±Æ÷ģʽ:TIMÂö³å¿í¶Èµ÷ÖÆģʽ2 ͨµÀ1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±È½ÏÊä³öʹÄÜTIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //Êä³ö¼«ÐÔ:TIMÊä³ö±È½Ï¼«ÐÔ¸ßTIM_OC1Init(TIM13, &TIM_OCInitStructure); //¸ù¾ÝTÖ¸¶¨µÄ²ÎÊý³õʼ»¯Íâ333333333333333ÉèTIM1 4OC1TIM_OC1PreloadConfig(TIM13, TIM_OCPreload_Enable); //ʹÄÜTIM13ÔÚCCR1ÉϵÄԤװÔؼĴæÆ÷TIM_ARRPreloadConfig(TIM13,ENABLE);//ARPEʹÄÜ TIM_Cmd(TIM13, ENABLE); //ʹÄÜTIM13}
#ifndef _TIMER_H
#define _TIMER_H
#include "sys.h"
//
//±¾³ÌÐòÖ»¹©Ñ§Ï°Ê¹Óã¬Î´¾×÷ÕßÐí¿É£¬²»µÃÓÃÓÚÆäËüÈκÎÓÃ;
//ALIENTEK STM32F407¿ª·¢°å
//¶¨Ê±Æ÷ Çý¶¯´úÂë
//ÕýµãÔ×Ó@ALIENTEK
//¼¼ÊõÂÛ̳:www.openedv.com
//´´½¨ÈÕÆÚ:2014/6/16
//°æ±¾£ºV1.0
//°æȨËùÓУ¬µÁ°æ±Ø¾¿¡£
//Copyright(C) ¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾ 2014-2024
//All rights reserved
// void TIM14_PWM_Init(u32 arr,u32 psc);
void TIM13_PWM_Init(u32 arr,u32 psc);#endif
二设定初始值和分频系数
TIM13_PWM_Init(8400-1,42-1); //×óÂÖTIM14_PWM_Init(8400-1,42-1); //ÓÒÂÖ
三设定初值
TIM_SetCompare1(TIM14,0);TIM_SetCompare1(TIM13,0);