cancel
Showing results for 
Search instead for 
Did you mean: 

Pb generating 2 PMW

franck2
Associate II
Posted on November 21, 2014 at 12:04

The original post was too long to process during our migration. Please click on the attachment to read the original post.
22 REPLIES 22
Posted on November 21, 2014 at 13:11

Pin configuration is broken, wrong pin, wrong bank

Duty is wrong, Period = N-1, Pulse (50%) = N / 2, not Pulse = (N - 2) / 2

Channel 3 setting configure Channel 1
Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Posted on November 21, 2014 at 13:43

PB9?? The AF settings also appear completely wrong.

A quick blind fix here, using the data sheet pin configurations.

#include ''stm32f30x.h''
static void TIM_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
uint16_t TimerPeriod = 0;
uint16_t ChannelPulse = 0;
/* GPIOA & GPIOB Clocks enable */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE);
/* GPIOA & GPIOB Configuration: Channel 3 (TIM2) and Channel 1 (TIM15) as alternate function push-pull */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // TIM2_CH3
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_10); // TIM2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; // TIM15_CH1
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_1); // TIM15
/* Tim15 and Tim2 Configuration ---------------------------------------------------
Generate 2 PWM signals :
Tim15 input clock (Tim15CLK) is set to APB2 clock (PCLK2)
Tim2 input clock (Tim2CLK) is set to APB1 clock (PCLK1)
=> Tim15CLK = PCLK2 = SystemCoreClock
=> Tim2CLK = PCLK1 = SystemCoreClock
Tim15CLK = SystemCoreClock, Prescaler = 0, Tim15 counter clock = SystemCoreClock
Tim2CLK = SystemCoreClock, Prescaler = 0, Tim2 counter clock = SystemCoreClock
SystemCoreClock is set to 72 MHz for STM32F30x devices
The objective is to generate 2 PWM signal at 1MHz for Tim15 and at 4MHz for Tim2:
- Tim15_Period = (SystemCoreClock / 1000000) - 1
- Tim2_Period = (SystemCoreClock / 4000000) - 1
The channel 1 and channel 3 duty cycle are set to 50%
The Timer pulse is calculated as follows:
- Channel2Pulse = DutyCycle * (Tim15_Period + 1) / 100
- Channel3Pulse = DutyCycle * (Tim2_Period + 1) / 100
Note:
SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f30x.c file.
Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate()
function to update SystemCoreClock variable value. Otherwise, any configuration
based on this variable will be incorrect.
----------------------------------------------------------------------- */
/* Compute the value to be set in ARR regiter to generate signal frequency at 1MHz */
TimerPeriod = (SystemCoreClock / 1000000);
/* Compute CCR1 value to generate a duty cycle at 50% for channel 1 */
ChannelPulse = (uint16_t) (((uint32_t) 5 * TimerPeriod) / 10);
/* Tim15 clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM15, ENABLE);
/* Time Base configuration */
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = TimerPeriod - 1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM15, &TIM_TimeBaseStructure);
/* Channel Configuration in PWM mode */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = ChannelPulse;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OC1Init(TIM15, &TIM_OCInitStructure); // TIM15_CH1
/* Tim1 counter enable */
TIM_Cmd(TIM15, ENABLE);
/*----------------------------------------------------------------------- */
/* Compute the value to be set in ARR regiter to generate signal frequency at 4MHz */
TimerPeriod = (SystemCoreClock / 4000000 );
/* Compute CCR1 value to generate a duty cycle at 50% for channel 3 */
ChannelPulse = (uint16_t) (((uint32_t) 5 * TimerPeriod) / 10);
/* Tim2 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
/* Time Base configuration */
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = TimerPeriod - 1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* Channel Configuration in PWM mode */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = ChannelPulse;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OC3Init(TIM2, &TIM_OCInitStructure); // TIM2_CH3
/* Tim2 counter enable */
TIM_Cmd(TIM2, ENABLE);
}
int main(void)
{
/*!< At this stage the microcontroller clock setting is already configured,
this is done through SystemInit() function which is called from startup
file (startup_stm32f30x.s) before to branch to application main.
To reconfigure the default setting of SystemInit() function, refer to
system_stm32f30x.c file
*/
/* TIM Configuration */
TIM_Config();
/* Infinite loop */
while (1);
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf(''Wrong parameters value: file %s on line %d

'', file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
franck2
Associate II
Posted on November 21, 2014 at 13:48

Hi Clive,

Pin configuration is broken, wrong pin, wrong bank

Looking at STM32F302R8 LQFP48 pinout: PB14=Tim15_ch1(AF1) and PA9=TIM2_CH3. Where am I wrong? I don't understand.

Channel 3 setting configure Channel 1

You mean the Timer period of one overwrite the other?

Thanks for your feedback.

Best regards

Posted on November 21, 2014 at 13:59

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9  | GPIO_Pin_14;

GPIO_Init(GPIOA, &GPIO_InitStructure);

Sets up PA9 and PA14, not PB14

AF_6 != AF1 or AF_10

OC1 != OC3

See blind fix example, I don't have a board/scope to hand and I haven't eat my breakfast yet.
Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
franck2
Associate II
Posted on November 21, 2014 at 15:24

Sorry to disturb again Clive, but PA14 is assigned for the debugg serial Wire on the STM32F302. As far I understand I can use any other one with correct banck and OC channel.

Thanks a lot for your resolved.

Have a good day and take care!

Franck

franck2
Associate II
Posted on November 21, 2014 at 16:53

Still Problem on generating PWM for Timer

I took now Tim15 ch2 (PA3) on PortA AF9 bus APB2.

Code is as follow:

#include ''stm32f30x.h''

static void TIM_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

uint16_t TimerPeriod = 0;

uint16_t ChannelPulse = 0;

/* GPIOA & GPIOB Clocks enable */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE);

/* GPIOA & GPIOB Configuration: Channel 3 (TIM2) and Channel 1 (TIM15) as alternate function push-pull */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // TIM2_CH3

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_10); // TIM2

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; // TIM15_CH2

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource14, GPIO_AF_9); // TIM15

/* Tim15 and Tim2 Configuration ---------------------------------------------------

Generate 2 PWM signals :

Tim15 input clock (Tim15CLK) is set to APB2 clock (PCLK2)

Tim2 input clock (Tim2CLK) is set to APB1 clock (PCLK1)

=> Tim15CLK = PCLK2 = SystemCoreClock

=> Tim2CLK = PCLK1 = SystemCoreClock

Tim15CLK = SystemCoreClock, Prescaler = 0, Tim15 counter clock = SystemCoreClock

Tim2CLK = SystemCoreClock, Prescaler = 0, Tim2 counter clock = SystemCoreClock

SystemCoreClock is set to 72 MHz for STM32F30x devices

The objective is to generate 2 PWM signal at 1MHz for Tim15 and at 4MHz for Tim2:

- Tim15_Period = (SystemCoreClock / 1000000) - 1

- Tim2_Period = (SystemCoreClock / 4000000) - 1

The channel 1 and channel 3 duty cycle are set to 50%

The Timer pulse is calculated as follows:

- Channel2Pulse = DutyCycle * (Tim15_Period + 1) / 100

- Channel3Pulse = DutyCycle * (Tim2_Period + 1) / 100

Note:

SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f30x.c file.

Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate()

function to update SystemCoreClock variable value. Otherwise, any configuration

based on this variable will be incorrect.

----------------------------------------------------------------------- */

/* Compute the value to be set in ARR regiter to generate signal frequency at 1MHz */

TimerPeriod = (SystemCoreClock / 1000000);

/* Compute CCR1 value to generate a duty cycle at 50% for channel 1 */

ChannelPulse = (uint16_t) (((uint32_t) 5 * TimerPeriod) / 10);

/* Tim15 clock enable */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM15, ENABLE);

/* Time Base configuration */

TIM_TimeBaseStructure.TIM_Prescaler = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseStructure.TIM_Period = TimerPeriod - 1;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM15, &TIM_TimeBaseStructure);

/* Channel Configuration in PWM mode */

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse = ChannelPulse;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

TIM_OC2Init(TIM15, &TIM_OCInitStructure); // TIM15_CH2

/* Tim1 counter enable */

TIM_Cmd(TIM15, ENABLE);

/*----------------------------------------------------------------------- */

/* Compute the value to be set in ARR regiter to generate signal frequency at 4MHz */

TimerPeriod = (SystemCoreClock / 4000000 );

/* Compute CCR1 value to generate a duty cycle at 50% for channel 3 */

ChannelPulse = (uint16_t) (((uint32_t) 5 * TimerPeriod) / 10);

/* Tim2 clock enable */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);

/* Time Base configuration */

TIM_TimeBaseStructure.TIM_Prescaler = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseStructure.TIM_Period = TimerPeriod - 1;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

/* Channel Configuration in PWM mode */

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse = ChannelPulse;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

TIM_OC3Init(TIM2, &TIM_OCInitStructure); // TIM2_CH3

/* Tim2 counter enable */

TIM_Cmd(TIM2, ENABLE);

}

int main(void)

{

/*!< At this stage the microcontroller clock setting is already configured,

this is done through SystemInit() function which is called from startup

file (startup_stm32f30x.s) before to branch to application main.

To reconfigure the default setting of SystemInit() function, refer to

system_stm32f30x.c file

*/

/* TIM Configuration */

TIM_Config();

/* Infinite loop */

while (1);

}

#ifdef USE_FULL_ASSERT

/**

* @brief Reports the name of the source file and the source line number

* where the assert_param error has occurred.

* @param file: pointer to the source file name

* @param line: assert_param error line source number

* @retval None

*/

void assert_failed(uint8_t* file, uint32_t line)

{

/* User can add his own implementation to report the file name and line number,

ex: printf(''Wrong parameters value: file %s on line %d\r\n'', file, line) */

/* Infinite loop */

while (1)

{

}

}

#endif

Nothing on pin PA3 as can be see on attachement.

One more pb. Somehow it seems that I break the communication with NUCLEO board. LED1 fixed orange! Keil debugger setting indicating a SW error: No cortex-M. SW device found. It is the second board that I put in the same state and I don't know how to come back!!

Thanks for your help on that ''easy'' - I understand subject.

________________

Attachments :

Screen_2014-11-21_04-54-36.jpeg : https://st--c.eu10.content.force.com/sfc/dist/version/download/?oid=00Db0000000YtG6&ids=0680X000006I0s2&d=%2Fa%2F0X0000000bi3%2Fz.WiPvwLpAoggFkPO_G7hf3DHBpk_XbwA1giO7CmMZM&asPdf=false
franck2
Associate II
Posted on November 21, 2014 at 16:56

Still Problem on generating PWM for Timer

I took now Tim15 ch2 (PA3) on PortA AF9 bus APB2.

Code is as follow:

#include ''stm32f30x.h''

static void TIM_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

uint16_t TimerPeriod = 0;

uint16_t ChannelPulse = 0;

/* GPIOA & GPIOB Clocks enable */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE);

/* GPIOA & GPIOB Configuration: Channel 3 (TIM2) and Channel 1 (TIM15) as alternate function push-pull */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // TIM2_CH3

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_10); // TIM2

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; // TIM15_CH2

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource14, GPIO_AF_9); // TIM15

/* Tim15 and Tim2 Configuration ---------------------------------------------------

Generate 2 PWM signals :

Tim15 input clock (Tim15CLK) is set to APB2 clock (PCLK2)

Tim2 input clock (Tim2CLK) is set to APB1 clock (PCLK1)

=> Tim15CLK = PCLK2 = SystemCoreClock

=> Tim2CLK = PCLK1 = SystemCoreClock

Tim15CLK = SystemCoreClock, Prescaler = 0, Tim15 counter clock = SystemCoreClock

Tim2CLK = SystemCoreClock, Prescaler = 0, Tim2 counter clock = SystemCoreClock

SystemCoreClock is set to 72 MHz for STM32F30x devices

The objective is to generate 2 PWM signal at 1MHz for Tim15 and at 4MHz for Tim2:

- Tim15_Period = (SystemCoreClock / 1000000) - 1

- Tim2_Period = (SystemCoreClock / 4000000) - 1

The channel 1 and channel 3 duty cycle are set to 50%

The Timer pulse is calculated as follows:

- Channel2Pulse = DutyCycle * (Tim15_Period + 1) / 100

- Channel3Pulse = DutyCycle * (Tim2_Period + 1) / 100

Note:

SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f30x.c file.

Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate()

function to update SystemCoreClock variable value. Otherwise, any configuration

based on this variable will be incorrect.

----------------------------------------------------------------------- */

/* Compute the value to be set in ARR regiter to generate signal frequency at 1MHz */

TimerPeriod = (SystemCoreClock / 1000000);

/* Compute CCR1 value to generate a duty cycle at 50% for channel 1 */

ChannelPulse = (uint16_t) (((uint32_t) 5 * TimerPeriod) / 10);

/* Tim15 clock enable */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM15, ENABLE);

/* Time Base configuration */

TIM_TimeBaseStructure.TIM_Prescaler = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseStructure.TIM_Period = TimerPeriod - 1;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM15, &TIM_TimeBaseStructure);

/* Channel Configuration in PWM mode */

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse = ChannelPulse;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

TIM_OC2Init(TIM15, &TIM_OCInitStructure); // TIM15_CH2

/* Tim1 counter enable */

TIM_Cmd(TIM15, ENABLE);

/*----------------------------------------------------------------------- */

/* Compute the value to be set in ARR regiter to generate signal frequency at 4MHz */

TimerPeriod = (SystemCoreClock / 4000000 );

/* Compute CCR1 value to generate a duty cycle at 50% for channel 3 */

ChannelPulse = (uint16_t) (((uint32_t) 5 * TimerPeriod) / 10);

/* Tim2 clock enable */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);

/* Time Base configuration */

TIM_TimeBaseStructure.TIM_Prescaler = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseStructure.TIM_Period = TimerPeriod - 1;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

/* Channel Configuration in PWM mode */

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse = ChannelPulse;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

TIM_OC3Init(TIM2, &TIM_OCInitStructure); // TIM2_CH3

/* Tim2 counter enable */

TIM_Cmd(TIM2, ENABLE);

}

int main(void)

{

/*!< At this stage the microcontroller clock setting is already configured,

this is done through SystemInit() function which is called from startup

file (startup_stm32f30x.s) before to branch to application main.

To reconfigure the default setting of SystemInit() function, refer to

system_stm32f30x.c file

*/

/* TIM Configuration */

TIM_Config();

/* Infinite loop */

while (1);

}

#ifdef USE_FULL_ASSERT

/**

* @brief Reports the name of the source file and the source line number

* where the assert_param error has occurred.

* @param file: pointer to the source file name

* @param line: assert_param error line source number

* @retval None

*/

void assert_failed(uint8_t* file, uint32_t line)

{

/* User can add his own implementation to report the file name and line number,

ex: printf(''Wrong parameters value: file %s on line %d\r\n'', file, line) */

/* Infinite loop */

while (1)

{

}

}

#endif

Nothing on pin PA3 as can be see on attachement.

One more pb. Somehow it seems that I break the communication with NUCLEO board. LED1 fixed orange! Keil debugger setting indicating a SW error: No cortex-M. SW device found. It is the second board that I put in the same state and I don't know how to come back!!

Thanks for your help on that ''easy'' - I understand subject.

________________

Attachments :

Screen_2014-11-21_04-54-36.jpeg : https://st--c.eu10.content.force.com/sfc/dist/version/download/?oid=00Db0000000YtG6&ids=0680X000006I0yA&d=%2Fa%2F0X0000000bi4%2FE8ocxkJKo6Yc_pXy0ri6JcdGWY9dERXrH7ZrL9hx67Q&asPdf=false
franck2
Associate II
Posted on November 21, 2014 at 16:59

Error is obvious in my code:

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource14, GPIO_AF_9); // TIM15

Should be PinSource3

Now I need to debugg the NUCLEO board and come back to a communication protocol.

Somebody know how I can?

franck2
Associate II
Posted on November 21, 2014 at 18:10

Hard PB solved by a hard reset.

Now still no PWM at Pin PA3.

I don't understand!

________________

Attachments :

Screen_2014-11-21_06-10-23.jpeg : https://st--c.eu10.content.force.com/sfc/dist/version/download/?oid=00Db0000000YtG6&ids=0680X000006I0t9&d=%2Fa%2F0X0000000bi2%2FpBNacSml_1zkwUeH_RzX8K4CNZdN7o3Nzxbb6YSOwu4&asPdf=false