主函数:
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "pwm.h"
int main()
{
u16 i=0;
u16 j=0;
u16 k=0;
u16 m=0;
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÖD¶ÏóÅÏ輶·Ö×é ·Ö2×é
LED_Init();
TIM4_CH1_CH2_CH3_PWM_Init(200, 7200-1); //20ms
while(1)
{
i=25;//¶æ»ú1
j=25;//¶æ»ú2
k=5;//¶æ»ú3
m=15;//¶æ»ú4
TIM_SetCompare1(TIM4,i);
TIM_SetCompare2(TIM4,j);
TIM_SetCompare3(TIM4,k);
TIM_SetCompare4(TIM4,m);
delay_ms(10);
}
}
==============================================
pwm方面:
#include "pwm.h"
/*******************************************************************************
* oˉ êy Ãû : TIM3_CH1_PWM_Init
* oˉêy1|Äü : TIM3í¨μà1 PWM3õê¼»ˉoˉêy
* êä èë : per:ÖØ×°ÔØÖμ
psc:·ÖÆμÏμêy
* êä 3ö : ÎT
*******************************************************************************/
void TIM4_CH1_CH2_CH3_PWM_Init(u16 per,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* ¿aÆôê±Öó */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
/* ********************ÅäÖÃGPIOμÄÄ£ê½oíIO¿ú***********************************==*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_6|GPIO_Pin_7;//DèòaÆäËû¿úÔù¼ó
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//¸′óÃíÆíìêä3ö
GPIO_Init(GPIOB,&GPIO_InitStructure);
TIM_TimeBaseInitStructure.TIM_Period=per; //×Ô¶ˉ×°ÔØÖμ
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //·ÖÆμÏμêy
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //éèÖÃÏòéϼÆêyÄ£ê½
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC1Init(TIM4,&TIM_OCInitStructure); //êä3ö±è½Ïí¨μà13õê¼»ˉ
TIM_OC2Init(TIM4,&TIM_OCInitStructure); //êä3ö±è½Ïí¨μà13õê¼»ˉ
TIM_OC3Init(TIM4,&TIM_OCInitStructure); //êä3ö±è½Ïí¨μà13õê¼»ˉ************************¼óIO¿úDèòaÔùìí¼óí¨μà
TIM_OC4Init(TIM4,&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable); //ê1ÄüTIMxÔú CCR1 éÏμÄԤװÔؼÄ′æÆ÷
TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable); //ê1ÄüTIMxÔú CCR1 éÏμÄԤװÔؼÄ′æÆ÷
TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable); //ê1ÄüTIMxÔú CCR1 éÏμÄԤװÔؼÄ′æÆ÷****************í¬ê±Õa±ßò2Dèòaìí¼ó
TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM4,ENABLE);//ê1ÄüԤװÔؼÄ′æÆ÷
TIM_Cmd(TIM4,ENABLE); //ê1Äü¶¨ê±Æ÷
}
================================================================
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)
{
/* Check the parameters */
assert_param(IS_TIM_LIST8_PERIPH(TIMx));
/* Set the Capture Compare1 Register value */
TIMx->CCR1 = Compare1;
}
/**
* @brief Sets the TIMx Capture Compare2 Register value
* @param TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
* @param Compare2: specifies the Capture Compare2 register new value.
* @retval None
*/
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2)
{
/* Check the parameters */
assert_param(IS_TIM_LIST6_PERIPH(TIMx));
/* Set the Capture Compare2 Register value */
TIMx->CCR2 = Compare2;
}
void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3)
{
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
/* Set the Capture Compare3 Register value */
TIMx->CCR3 = Compare3;
}
/**
* @brief Sets the TIMx Capture Compare4 Register value
* @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
* @param Compare4: specifies the Capture Compare4 register new value.
* @retval None
*/
void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4)
{
/* Check the parameters */
assert_param(IS_TIM_LIST3_PERIPH(TIMx));
/* Set the Capture Compare4 Register value */
TIMx->CCR4 = Compare4;
}