• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

F1串口中断与服务函数问题

PG_CPZ 2018-08-27 浏览量:966
用单片机实现与电脑之间通讯,假如电脑上的串口助手以16进制发送这么一段数据A5 5A 06 83 01 11 01 21 31,请问
void USART1_IRQHandler(void)                 //串口1中断服务程序
{
  if(USART_GetITStatus(USART1USART_IT_RXNE)) //判断接收缓冲区非空

  USART_RX_BUF[USART_RX_STA]=USART_ReceiveData(USART1);
  USART_RX_STA++;
}
}
用这个中断服务函数接收数据存到缓冲区中,中断产生几?服务函数执行几次?
我的理解是串口一次性只能发送一个字节(8bit),单片机每接收一个字节产生一次中断,进入中断服务函数中一次,同时静态或全局变量USART_RX_STA加一次,也就是说接收这串数据总共要产生9次中断,执行9次中断服务函数。
不知道是不是这样,求大神解答一下呢!!!
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 你开了接收中断,收到一个字节,中断一次,所以,合计中断9次,没有毛病。

    你理解的是正确的。


    STM32的串口,有多种方式,但常用的有DMA+IDLE中断方式。

    当然也有接收单字符中断。

    IDLE中断,就是一个数据帧发送完成,串口空闲了会产生一次IDLE中断,用这个中断方式,可以方便的进行数据帧分断,很好用的。

    • 发布于 2018-08-27
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:14
  • 看这情况是每个字符进入一次中断,每次中断当然都要进入服务函数了

    这是不定长接受的常规方法。

    不过我还是推荐DMA+空闲中断来接收不定长数据

    比较每个字符进入一次中断太浪费资源了

    • 发布于2018-08-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 理解的基本是对的,不管是51还是STM322也好,都是接受到一个字节的数据就必须要中断一次,加入你的使用串口助手一次性接受20个字节的数据包,单片机就会中断20次,中断函数就会执行20次。
    • 发布于2018-08-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 32里面hal库可以接受定长数据。就是你先确定好你要接受的数据长度,每次接收一组数据才产生一次中断,如果想接收不定长数据就必须每接收一个字节就产生一次中断
    • 发布于2018-08-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 理解是正确的,现在32的库里面有个串口空闲中断,你可以用这个中断去判断一帧数据接收完成再去处理接收的数据。
    • 发布于2018-08-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 接收到一个字节中断一次,20个字节中断20次
    • 发布于2018-08-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 是这样子的 每次进入中断是1个字节 ,有多少字节就需要中断多少次
    • 发布于2018-08-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 收到了9个字节,应该产生9次接收中断才对,并且接收完一帧之后会收到一个空闲中断,收到空闲中断之后STA要清零。

    • 发布于2018-08-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种应该会产生9次接收中断,进入中断服务函数却不止是9次

    因为产生的中断不一定只有接收中断,如果你开启了空闲中断那些也会在接收完成之后进入的

    • 发布于2018-08-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 中断发生次数与你接收的字符数相同,就是9次,然后产生一次空闲中断。
    • 发布于2018-08-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 每接收一个字节中断一次,等所有都接收完后就会产生空闲中断一次。
    • 发布于2018-09-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是每一个字符就会产生一次中断,根据你的中断来计数的
    • 发布于2018-09-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 中断的实际次数会和你的字符数相同,最后会产生一个空闲中断
    • 发布于2018-09-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 中断函数可以配置FIFO的深度,对应的字符中断也会改变
    • 发布于2018-09-22
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

F1串口中断与服务函数问题