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 ]
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
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.
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 ]