/**********************************************************************
程序名: BSP_PA1_38KHZ_Init
输入: 无
输出: 无
返回: 无
说明:PA1产生38K的PWM脉冲, 用于红外载波
**********************************************************************/
void BSP_PA1_38KHZ_Init()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// /* TIM2 clock enable */
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//
// /* GPIOC clock enable */
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//
// /* GPIOC Configuration: TIM2 channel 2 as alternate function push-pull */
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_Init(GPIOA, &GPIO_InitStructure);
//
// /* -----------------------------------------------------------------------
// TIM2 Configuration: generate PWM signals with different duty cycles:
// TIM2 CLK = 20MHz(APB1=PCLK1 -> Time2 Multip*2), Prescaler = 0x0, TIM2
// counter clock = 20 MHz
// TIM2 ARR Register = 525 => TIM2 Frequency = TIM2 counter clock/(ARR + 1)
// TIM2 Frequency = 38022 Hz.
//
// Channel2 duty cycle = (TIM2_CCR2/ TIM2_ARR')* 100 = ~50%
// ----------------------------------------------------------------------- */
// /* Time base configuration */
// TIM_TimeBaseStructure.TIM_Period = 525;
// TIM_TimeBaseStructure.TIM_Prescaler = 0;
// TIM_TimeBaseStructure.TIM_ClockDivision = 0;
// TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
// TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
//
// /* PWM1 Mode configuration: Channel2 */
// TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
// TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
// TIM_OCInitStructure.TIM_Pulse = (TIM_TimeBaseStructure.TIM_Period + 1)/2;
// TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
// TIM_OC2Init(TIM2, &TIM_OCInitStructure);
//
// TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
//
// TIM_ARRPreloadConfig(TIM2, ENABLE);
// TIM_Cmd(TIM2, ENABLE);
//
/* TIM8 clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
/* GPIOC clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
/* GPIOC Configuration: TIM8 channel 4 as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* -----------------------------------------------------------------------
TIM8 Configuration: generate PWM signals with different duty cycles:
TIM8 CLK = 40MHz
counter clock = 40 MHz
TIM8 ARR Register => TIM8 Frequency = TIM8 counter clock/(ARR + 1)
TIM8 Frequency = 38022 Hz.
Channel2 duty cycle = (TIM2_CCR2/ TIM2_ARR')* 100 = ~50%
----------------------------------------------------------------------- */
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 1052;//525;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
/* PWM1 Mode configuration: Channel2 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable ;
TIM_OCInitStructure.TIM_OutputNState= TIM_OutputNState_Enable ;
TIM_OCInitStructure.TIM_Pulse = (TIM_TimeBaseStructure.TIM_Period + 1)/2;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High ;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set ;
TIM_OCInitStructure.TIM_OCNIdleState= TIM_OCNIdleState_Set ;
TIM_OC4Init(TIM8, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM8, ENABLE);
TIM_Cmd(TIM8, ENABLE);
DelayUS(500); }
打斜杠的是原先我用PA1产生的38K载波,而我用TIM8_CH4的时候就不行了,网上找了一下没找到,请香主帮忙再看一下。我用的STM32103et6 LQFP144
再datasheet 里面我看到 PC9 DEFAULT 是TIM8_CH4/SDIO_D1
|