STM32串口通信中接收不到信息怎么回事? 10
本来运行得很好,第二天接收到的就是乱码了,现在直接接收不到了,怎么回事?晶振是11.0592的那个,波特率的配置也没问题,程序如下,求大神指导。#include"stm3...
本来运行得很好,第二天接收到的就是乱码了,现在直接接收不到了,怎么回事?晶振是11.0592的那个,波特率的配置也没问题,程序如下,求大神指导。
#include"stm32f10x.h"
#include"stdio.h"
void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART_Configuration(void);
int fputc(int ch,FILE *f)
{
USART_SendData(USART1,(u8)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //当发送没有完成时,空指令
return ch;
}
int main(void)
{
vu16 i=0;
RCC_Configuration();
GPIO_Configuration();
USART_Configuration();
while(1)
{
printf("\r\nHello\r\n");
//等待USART1接收数据完毕
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET)//如果数据接收到并且可以读出来
{
//向串口发送接收到的数据
USART_SendData(USART1,USART_ReceiveData(USART1));
//短延时,保证收发稳定性
for(i=0;i<500;i++);
}
}
}
void RCC_Configuration(void)
{
{
/*本部分代码为RCC_Configuration函数内部部分代码*/
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus=RCC_WaitForHSEStartUp();
if(HSEStartUpStatus==SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
FLASH_SetLatency(FLASH_Latency_2);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource()!=0x08);
}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//设置USART1的Tx脚(PA.9)为第2功能推挽输出模式
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);
//设置USART1的Rx脚(PA.10)为浮空输入脚
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
// USART_ClockInitTypeDef USART_ClockInitStructure;
//波特率为9600bps;8位数据长度;1个停止位,无校验;禁用硬件流控制;禁止USART时钟;
//时钟极性低;在第2个边沿捕获数据;最后一位的时钟脉冲不从SCLK输出
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_Rx|USART_Mode_Tx; //接收和发送使能
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE); //使能USART1
} 展开
#include"stm32f10x.h"
#include"stdio.h"
void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART_Configuration(void);
int fputc(int ch,FILE *f)
{
USART_SendData(USART1,(u8)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //当发送没有完成时,空指令
return ch;
}
int main(void)
{
vu16 i=0;
RCC_Configuration();
GPIO_Configuration();
USART_Configuration();
while(1)
{
printf("\r\nHello\r\n");
//等待USART1接收数据完毕
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET)//如果数据接收到并且可以读出来
{
//向串口发送接收到的数据
USART_SendData(USART1,USART_ReceiveData(USART1));
//短延时,保证收发稳定性
for(i=0;i<500;i++);
}
}
}
void RCC_Configuration(void)
{
{
/*本部分代码为RCC_Configuration函数内部部分代码*/
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus=RCC_WaitForHSEStartUp();
if(HSEStartUpStatus==SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
FLASH_SetLatency(FLASH_Latency_2);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource()!=0x08);
}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//设置USART1的Tx脚(PA.9)为第2功能推挽输出模式
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);
//设置USART1的Rx脚(PA.10)为浮空输入脚
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
// USART_ClockInitTypeDef USART_ClockInitStructure;
//波特率为9600bps;8位数据长度;1个停止位,无校验;禁用硬件流控制;禁止USART时钟;
//时钟极性低;在第2个边沿捕获数据;最后一位的时钟脉冲不从SCLK输出
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_Rx|USART_Mode_Tx; //接收和发送使能
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE); //使能USART1
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询