串口接收数据失败

2019-07-14 20:33发布

用USART1进行串口收发数据,始终收不到数据,mcu始终处于闲的状态,我初始化的代码 和main函数代码在下面,望大神指教到底是啥问题???
void Usart_Configuration(uint32_t BaudRate)
{
USART_InitTypeDef USART_InitStructure;            //定义一个串口结构体

USART_InitStructure.USART_BaudRate            =BaudRate ;      //波特率115200
USART_InitStructure.USART_WordLength          = USART_WordLength_8b;  //传输过程中使用8位数据
USART_InitStructure.USART_StopBits            = USART_StopBits_1;   //在帧结尾传输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_ITConfig(USART1,USART_IT_RXNE,ENABLE);       //使能串口中断接收
USART_Cmd(USART1, ENABLE);                //使能串口外设
}
int main(void)
{
SystemInit();     //系统时钟配置
Init_LED();      //各个外设引脚配置
Init_Usart();     //串口引脚配置
Usart_Configuration(115200); //串口配置 设置波特率为115200
while(1)            
{  
  printf("%d",USART1_Receive_Byte());   
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
魏小延
1楼-- · 2019-07-15 13:30
cjgwin 发表于 2016-8-1 14:25
是不是没有初始化IO口时钟?

如果没有初始化IO适中的话,应该电脑收不到芯片发送的数据啊?
meimengxing2014
2楼-- · 2019-07-15 15:16
你的中断服务程序呢?
meimengxing2014
3楼-- · 2019-07-15 18:35
 精彩回答 2  元偷偷看……
北洋水师
4楼-- · 2019-07-15 20:32
串口中断使用需注意:在串口中断服务函数里每一次要把读写寄存器里的内容读走,另外 看看有没有别的中断打断了串口中断 使能配置都配置好了没有 时钟都开了没有 IO模式配置对了没有  我能想到的就这些
北洋水师
5楼-- · 2019-07-15 21:54
串口中断使用要注意,串口中断服务函数要把读写寄存器里的内容读走
魏小延
6楼-- · 2019-07-15 22:28
meimengxing2014 发表于 2016-8-3 10:24
你的中断服务程序呢?

我删掉了这条语句,把接收函数直接写到了主函数里
int main(void)
{
        SystemInit();
        Init_Usart();
        Usart_Configuration(115200);
        while(1)
        {       
                u8 i=65;
                printf(menu);
                i=USART1_Receive_Byte();
        //        Delay_Ms(1000);                                        //系统时钟配置
                USART1_Send_Byte(i);
                printf("%c",i);
                Delay_Ms(1000);
        }
}
这个接受字节的函数必须放到中断里?

一周热门 更多>