新手入门
- 积分
- 9
- 金钱
- 6
- 注册时间
- 2016-7-20
- 在线时间
- 0 小时
|
3金钱
一个关于把printf定向到串口的程序,运行以后就停止不动,把int fputc(u8 ch,FILE *f)去掉以后又可以正常运行,这是设呢么情况,求大神指导,下面是代码:
/*Include---------------------------*/
#include"stm32f10x_lib.h" //°üº¬ËùÓеÄÍ·Îļþ
#include<stdio.h>
//----------------函数申明--------------------
void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART_Configuration(void);
int fputc(u8 ch,FILE *f)
{
//ch发送给USART1
USART_SendData(USART1,ch);
//等待发送完毕
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
//返回ch
return(ch);
}
int main (void)
{
u8 i, data;
USART_Configuration();
RCC_Configuration();
GPIO_Configuration();
data='A';
for(i=0;i<30;i++)
{
USART_SendData(USART1,data);
data++;
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
}
printf("abcbd");
}
/*******************************************************************************
* Function Name : RCC_Configuration
* Description : Configures the different system clocks.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void RCC_Configuration(void)
{
//----------ʹÓÃÍⲿRC¾§Õñ-----------
RCC_DeInit(); //³õʼ»¯ÎªÈ±Ê¡Öµ
RCC_HSEConfig(RCC_HSE_ON); //ʹÄÜÍⲿµÄ¸ßËÙʱÖÓ
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //µÈ´ýÍⲿ¸ßËÙʱÖÓʹÄܾÍÐ÷
//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer
//FLASH_SetLatency(FLASH_Latency_2); //Flash 2 wait state
RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ
RCC_PLLCmd(ENABLE); //Enable PLLCLK
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock
while(RCC_GetSYSCLKSource()!=0x08); //Wait till PLL is used as system clock source
//---------´ò¿ªÏàÓ¦ÍâÉèʱÖÓ--------------------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //ʹÄÜAPB2ÍâÉèµÄGPIOAµÄʱÖÓ
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //ʹÄÜAPB2ÍâÉèµÄGPIOCµÄʱÖÓ
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
}
/*******************************************************************************
* Function Name : GPIO_Configuration
* Description : ³õʼ»¯GPIOÍâÉè
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //ÉùÃ÷Ò»¸ö½á¹¹Ìå±äÁ¿
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //¹Ü½ÅƵÂÊΪ50MHZ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure); //³õʼ»¯GPIOA¼Ä´æÆ÷
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure); //³õʼ»¯GPIOA¼Ä´æÆ÷
}
void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1,ENABLE);
}
|
|