mohsen-p
18-10-2012, 00:54
من یه کد نوشتم که یه پین ست و ریست میشه و سپس یه عبارت به USART ارسال میشه.مشکل اینه که این کد بدون دستور printf اجرا میشه. اما هنگامی که printf از حالت کامنت خارج میشه برنامه دیگه اجرا نمیشه (حتی پین هم ست نمیشه).کسی می دونه مشکل از کجاست؟در حالی که همین کد در سری rb مشکلی نداره.
#include <stm32f10x.h>
#include <stdio.h>
#include <stm32f10x_rcc.h>
#include <stm32f10x_gpio.h>
#include <stm32f10x_usart.h>
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART_Configuration(void);
int i;
int main()
{
RCC_Configuration();
GPIO_Configuration();
GPIO_SetBits(GPIOB, GPIO_Pin_6); //Set LED_Power
USART_Configuration();
printf("USART3 Is OK\n\r");
while (1)
{
{
GPIO_SetBits(GPIOB, GPIO_Pin_7); //Set LED_Scan
for(i=1;i<100000;i++);
GPIO_ResetBits(GPIOB, GPIO_Pin_7); //Reset LED_Scan
for(i=1;i<100000;i++);
}
}
}
void RCC_Configuration(void) //Crystal=8Mhz
{
//RCC_DeInit(); // RESET to defult RCC
RCC_HSEConfig (RCC_HSE_ON); // High Speed External is ON
//RCC_HSICmd ( DISABLE ); // Low Speed Internal is OFF
RCC_PLLConfig (RCC_PLLSource_HSE_Div1, RCC_PLLMul_7); // 8MHz*1*7=56MHz
RCC_PLLCmd (ENABLE); // PLL is ENABLE
RCC_SYSCLKConfig ( RCC_SYSCLKSource_PLLCLK ); // SYSTEM_CLOCK get Frq as PLL
RCC_HCLKConfig ( RCC_SYSCLK_Div1 ); // SYSTEM_CLOCK*1
RCC_PCLK1Config ( RCC_HCLK_Div2 ); // Feq+APB2=28MHz
RCC_PCLK2Config ( RCC_HCLK_Div1 ); // Feq+APB2=56MHz
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA, ENABLE); // GPIOA is ENABLE
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB, ENABLE); // GPIOB is ENABLE
RCC_ADCCLKConfig ( RCC_PCLK2_Div4 );
RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1, ENABLE);// UART1 is ENABLE
// (RCC_APB1Periph_USART3, ENABLE);// UART3 is ENABLE
}
void GPIO_Configuration(void)
{
//LED (PinB.6 & PinB.7)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //LED_Power & LED_Scan
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void USART_Configuration(void)
{
// UART1 (1 8 1 n 230400 & Hardware flow control disabled(RTS & CTS signals)) ================================================== =========
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//USART_DeInit (USART1);
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(USART1, (uint8_t) ch);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
return ch;
}
#include <stm32f10x.h>
#include <stdio.h>
#include <stm32f10x_rcc.h>
#include <stm32f10x_gpio.h>
#include <stm32f10x_usart.h>
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART_Configuration(void);
int i;
int main()
{
RCC_Configuration();
GPIO_Configuration();
GPIO_SetBits(GPIOB, GPIO_Pin_6); //Set LED_Power
USART_Configuration();
printf("USART3 Is OK\n\r");
while (1)
{
{
GPIO_SetBits(GPIOB, GPIO_Pin_7); //Set LED_Scan
for(i=1;i<100000;i++);
GPIO_ResetBits(GPIOB, GPIO_Pin_7); //Reset LED_Scan
for(i=1;i<100000;i++);
}
}
}
void RCC_Configuration(void) //Crystal=8Mhz
{
//RCC_DeInit(); // RESET to defult RCC
RCC_HSEConfig (RCC_HSE_ON); // High Speed External is ON
//RCC_HSICmd ( DISABLE ); // Low Speed Internal is OFF
RCC_PLLConfig (RCC_PLLSource_HSE_Div1, RCC_PLLMul_7); // 8MHz*1*7=56MHz
RCC_PLLCmd (ENABLE); // PLL is ENABLE
RCC_SYSCLKConfig ( RCC_SYSCLKSource_PLLCLK ); // SYSTEM_CLOCK get Frq as PLL
RCC_HCLKConfig ( RCC_SYSCLK_Div1 ); // SYSTEM_CLOCK*1
RCC_PCLK1Config ( RCC_HCLK_Div2 ); // Feq+APB2=28MHz
RCC_PCLK2Config ( RCC_HCLK_Div1 ); // Feq+APB2=56MHz
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA, ENABLE); // GPIOA is ENABLE
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB, ENABLE); // GPIOB is ENABLE
RCC_ADCCLKConfig ( RCC_PCLK2_Div4 );
RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1, ENABLE);// UART1 is ENABLE
// (RCC_APB1Periph_USART3, ENABLE);// UART3 is ENABLE
}
void GPIO_Configuration(void)
{
//LED (PinB.6 & PinB.7)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //LED_Power & LED_Scan
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void USART_Configuration(void)
{
// UART1 (1 8 1 n 230400 & Hardware flow control disabled(RTS & CTS signals)) ================================================== =========
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//USART_DeInit (USART1);
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(USART1, (uint8_t) ch);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
return ch;
}