cancel
Showing results for 
Search instead for 
Did you mean: 

A very simple blink problem

optizyme
Associate II
Posted on July 06, 2009 at 00:25

A very simple blink problem

5 REPLIES 5
briand.myers9
Associate II
Posted on May 17, 2011 at 13:16

Don't know if this is your problem or not, but maybe. In your main(), there is this code:

/* Enable GPIOC clock */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

You are enabling GPIOB, in spite of the comment. Perhaps you need to enable the GPIOC clock?

cheers,

Brian

optizyme
Associate II
Posted on May 17, 2011 at 13:16

Dear All,

First of all i'm very new to STM32 family. (Sorry for my bothering questions) I'm just running warm-up tour on my STM32 board and trying example files in Keil. Here is a code that i am working on :

/******************** (C) COPYRIGHT 2007 STMicroelectronics ********************

* File Name : main.c

* Author : MCD Application Team

* Version : V1.0

* Date : 10/08/2007

* Description : Main program body

********************************************************************************

* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS

* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.

* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,

* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE

* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING

* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.

*******************************************************************************/

/* Includes ---------------*/

#include ''stm32f10x_lib.h''

/* Private typedef --------*/

/* Private define ---------*/

/* Private macro ----------*/

/* Private variables ------*/

GPIO_InitTypeDef GPIO_InitStructure;

ErrorStatus HSEStartUpStatus;

/* Private function prototypes -------------*/

void RCC_Configuration(void);

void NVIC_Configuration(void);

void Delay(vu32 nCount);

/* Private functions ------*/

/*******************************************************************************

* Function Name : main

* Description : Main program.

* Input : None

* Output : None

* Return : None

*******************************************************************************/

int main(void)

{

#ifdef DEBUG

debug();

#endif

/* Configure the system clocks */

RCC_Configuration();

/* NVIC Configuration */

NVIC_Configuration();

/* Enable GPIOC clock */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

/* Configure PC.06, PC.07, PC.08 and PC.09 as Output push-pull */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_20MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

while (1)

{

/* Turn on led connected to PC.06 pin */

GPIO_SetBits(GPIOB, GPIO_Pin_8);

/* Insert delay */

Delay(0xAFFFF);

/* Turn on led connected to PC.07 and PC.08 pins */

GPIO_SetBits(GPIOB, GPIO_Pin_9 | GPIO_Pin_10);

/* Turn off led connected to PC.06 pin */

GPIO_ResetBits(GPIOB, GPIO_Pin_8);

/* Insert delay */

Delay(0xAFFFF);

/* Turn on led connected to PC.09 pin */

GPIO_SetBits(GPIOB, GPIO_Pin_11);

/* Turn off led connected to PC.07 and PC.08 pins */

GPIO_ResetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_9);

/* Insert delay */

Delay(0xAFFFF);

/* Turn off led connected to PC.09 pin */

GPIO_ResetBits(GPIOB, GPIO_Pin_11);

}

}

/*******************************************************************************

* Function Name : RCC_Configuration

* Description : Configures the different system clocks.

* Input : None

* Output : None

* Return : None

*******************************************************************************/

void RCC_Configuration(void)

{

/* RCC system reset(for debug purpose) */

RCC_DeInit();

/* Enable HSE */

RCC_HSEConfig(RCC_HSE_ON);

/* Wait till HSE is ready */

HSEStartUpStatus = RCC_WaitForHSEStartUp();

if(HSEStartUpStatus == SUCCESS)

{

/* Enable Prefetch Buffer */

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

/* Flash 2 wait state */

FLASH_SetLatency(FLASH_Latency_2);

/* HCLK = SYSCLK */

RCC_HCLKConfig(RCC_SYSCLK_Div1);

/* PCLK2 = HCLK */

RCC_PCLK2Config(RCC_HCLK_Div1);

/* PCLK1 = HCLK/2 */

RCC_PCLK1Config(RCC_HCLK_Div2);

/* PLLCLK = 8MHz * 9 = 72 MHz */

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

/* Enable PLL */

RCC_PLLCmd(ENABLE);

/* Wait till PLL is ready */

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

{

}

/* Select PLL as system clock source */

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

/* Wait till PLL is used as system clock source */

while(RCC_GetSYSCLKSource() != 0x08)

{

}

}

}

/*******************************************************************************

* Function Name : NVIC_Configuration

* Description : Configures Vector Table base location.

* Input : None

* Output : None

* Return : None

*******************************************************************************/

void NVIC_Configuration(void)

{

#ifdef VECT_TAB_RAM

/* Set the Vector Table base location at 0x20000000 */

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

#else /* VECT_TAB_FLASH */

/* Set the Vector Table base location at 0x08000000 */

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif

}

/*******************************************************************************

* Function Name : Delay

* Description : Inserts a delay time.

* Input : nCount: specifies the delay time length.

* Output : None

* Return : None

*******************************************************************************/

void Delay(vu32 nCount)

{

for(; nCount != 0; nCount--);

}

#ifdef DEBUG

/*******************************************************************************

* Function Name : assert_failed

* Description : Reports the name of the source file and the source line number

* where the assert_param error has occurred.

* Input : - file: pointer to the source file name

* - line: assert_param error line source number

* Output : None

* Return : None

*******************************************************************************/

void assert_failed(u8* file, u32 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

/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/

I'm using ETT STM32 eval board which is very similar to MCBSTM32 and i can make all MCB samples working. (Except this one) It is a very simple blink program but my leds rejects to flash. All my leds are on when i run the code. Where is the problem?

Optizyme

Edit : I tried to use CODE button but my message went blank??

[ This message was edited by: optizyme on 05-07-2009 23:00 ]

[ This message was edited by: optizyme on 05-07-2009 23:02 ]

optizyme
Associate II
Posted on May 17, 2011 at 13:16

Hi Brian,

Actually my code magically worked after my post! I don't know why? Thank you for your kind interest.

Optizyme

[ This message was edited by: optizyme on 06-07-2009 01:17 ]

jj
Associate II
Posted on May 17, 2011 at 13:16

This smells to me like an IDE ''optimization'' issue. (set your code optimization to ''none/minimal'' while you're learning/experimenting)

Further - posted code sets one/several Led ''bits'' and next instruction clears them. You won't be able to see this. Suggest that you insert

delays ''after'' each set bit - AND after each clear bit instruction. In this way you can see the Leds actuate.

axelsaff
Associate II
Posted on November 24, 2014 at 20:00

Thanks for your help,i had a same problem and now everything is working fine after i removed the autooptimisation.