2983|1

45

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请大家帮我看看这段串口接收中断代码有什么问题? [复制链接]

小弟恳请各位大侠挤出宝贵时间帮我看一下这个问题,我是用串口接收中断接收数据 可是为什么每次进入中断都会死在里面出不来?单步运行后发现,每次进接收中断后只能接收到数据帧的第一个字节,然后就会陷在 USART1_ReceiveChar()这个函数里出不来了,请问各位大侠,USART_ReceiveData()这个库函数执行后会清零USART_FLAG_RXNE这个标识么 我看了库函数体  貌似不会清零啊 不知怎么的 就是不能完整接收一帧数据 求大侠指导  讲解stm32串口接收的原理啊  跪求串口收发相关例程

 

 

 

void USART1_IRQHandler(void)
{
  if ( USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET)//查询是否为秒中断标志
  {
   
    while(USART1_ReceiveChar()!=0xaa);//寻找帧头
    while(USART1_ReceiveChar()!=0xbb)//若是没到帧尾就继续接收
    rbuff[i++]=USART1_ReceiveChar();
    for(char j=0;j<i;j++)USART1_Putc(rbuff[j]);//把接收到的数据发送出去
    USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清中断标识
  }
 
}

 

void USART1_Putc(char c)
{
    USART_SendData(USART1, c);
        /* Loop until the end of transmission */
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}

 

 

unsigned char USART1_ReceiveChar(void)
{
  while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
  return(USART_ReceiveData(USART1));
}

 

 

此帖出自stm32/stm8论坛

最新回复

while(USART1_ReceiveChar()!=0xaa);//寻找帧头     while(USART1_ReceiveChar()!=0xbb)//若是没到帧尾就继续接收 既不是头也不是尾,那就循环啊~~~~ 没错啊,出不来啊  详情 回复 发表于 2012-2-22 16:59
点赞 关注
 

回复
举报

381

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
while(USART1_ReceiveChar()!=0xaa);//寻找帧头
    while(USART1_ReceiveChar()!=0xbb)//若是没到帧尾就继续接收

既不是头也不是尾,那就循环啊~~~~ 没错啊,出不来啊
此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表