Skip to main content
optizyme
Associate II
July 5, 2009
Question

A very simple blink problem

  • July 5, 2009
  • 5 replies
  • 1149 views
Posted on July 06, 2009 at 00:25

A very simple blink problem

    This topic has been closed for replies.

    5 replies

    optizyme
    optizymeAuthor
    Associate II
    May 17, 2011
    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 ]

    briand.myers9
    Associate
    May 17, 2011
    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

    jj_it
    Associate II
    May 17, 2011
    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.

    optizyme
    optizymeAuthor
    Associate II
    May 17, 2011
    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 ]

    axelsaff
    Associate
    November 24, 2014
    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.