私は可能な限りこれを分離しようとしています(比較のためにTIM3コードをコメントアウトすることによって)。私はTIM3上でうまく動作するPWMを持っていますが、TIM1では何も見ていません。もともと、この問題はTIM_OCInitStructureのいくつかのコメントに指摘されていました。私はそれらをすべてそこに持っていて、まだ何の信号も見ていません。誰かがコードに欠けている何かを見ますか?STM32F0のPWMにTIM1を使用したときのエラー
void TIM_TIMER_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM3EN, ENABLE); //timer 3
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //timer 1
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 4799; // PER = F_timer/F_pwm - 1
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
// Initialize TIMx
// TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
// Start count on TIMx
// TIM_Cmd(TIM3, ENABLE);
TIM_Cmd(TIM1, ENABLE);
}
void TIM_PWM_Init(void)
{
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; // PWM1/PWM2 = set/clear on compare match
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM_OCInitStructure.TIM_Pulse = 959; // 20% Duty Cycle on ch. 1
// TIM_OC1Init(TIM3, &TIM_OCInitStructure);
// TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
/*
TIM_OCInitStructure.TIM_Pulse = 1919; // 40% Duty Cycle on ch. 2
// TIM_OC2Init(TIM3, &TIM_OCInitStructure);
// TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC2Init(TIM1, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_Pulse = 2879; // 60% Duty Cycle on ch. 3
// TIM_OC3Init(TIM3, &TIM_OCInitStructure);
// TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC3Init(TIM1, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_Pulse = 3839; // 80% Duty Cycle on ch. 4
// TIM_OC4Init(TIM3, &TIM_OCInitStructure);
// TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC4Init(TIM1, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
*/}
//"using convenience methods instead of CMSIS"
void TIM_PINS_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); //enabling port C
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //enabling port A
// Alternative Functions for pins
// GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_0); // PC6
// GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_0); // PC7
// GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_0); // PC8
// GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_0); // PC9
GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_2); // PA8
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_2); // PA9
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_2); // PA10
GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_2); // PA11
// Set pins
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
////////////////// 元の質問 //////////////////
誰もこのコードの問題を見ていますか?ファイル "../system/src/stm32f0-stdperiph/stm32f0xx_tim.c"、行811:
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_Pulse = 959; // 20% Duty Cycle on ch. 1
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
問題は、エラーが
assert_param()失敗である
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
であります。その行をそれを見上げることです:
if((TIMx == TIM1) || (TIMx == TIM15) || (TIMx == TIM16) || (TIMx == TIM17))
{
assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState)); // <- line 811
TIM_OC1Init()関数は、TIM1 TIM3のために働くようだが、ではありません。私はこのフォーラムの他の人たちがTIM1のTIM_OC1Init()を使用しているのを見てきましたので、私にとって何が問題なのか分かりません。これは私がch.1をどのように設定するのでしょうか?
同じ制御構造をタイマー3に渡してからタイマー1に渡すことができますか? –
私はそれについても興味がありました。もし私がtim3のものをコメントアウトしていればエラーは同じです –
Timer TIM1に 'TIM_Output_Compare_N_State'を定義して、' TIM__Output_Compare_N_State'を呼び出す前に 'TIM__OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;'または 'TIM__OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; TIMOC1Init'には 'TIM1'があります。 – gmug