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

在串口中断中发送数据比在主函数中发送数据慢是怎么回事

sym_cool 2018-08-19 浏览量:2156

新手想要实现stm32接收固定连续数据并插入其他数据,0.3秒周期。

于是在正点原子的串口中断程序中的if((USART_RX_STA&0x8000)==0)的else中加入了几行printf发送程序,也就是进入中断判断是否接收到0x0A进行编辑转发,发现周期变成了0.7秒。

而根据正点原子例程修改的在主函数循环中判断if(USART_RX_STA&0x8000)然后处理数据发送数据是0.3秒没有问题。

在中断程序内发送数据会导致速度变慢吗?



左为中断内发送,右为主函数发送

QQ截图20180819171411.png



3 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 整理一下你的中断函数:

    单片机的任何都要遵循一个原则,快进快出。


    修改一下:

    你的串口中断就只干一个事情,接收串口字符。

    在主函数中,做字符判断和其它处理。

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

其他答案 数量:13
  • 0.7s,0.3s,是怎么计数的?

    0.3s 仅仅是处理数据的时间,0.7s 是怎么计数的,从哪开始到哪结束

    • 发布于2018-08-19
    • 举报
    • 评论 1
    • 3
    • 0
sym_cool 回复了 robe_zhang :单片机接收的字符串是以0.3秒为周期,按照左边程序,只有在接收到0x0A的下一次接收才会进行printf给电脑发送数据,设想是电脑接收的周期和单片机接收字符串的周期一样0.3s 回复

  • 中断的优先级是多大,是不是还有更高的来打断串口收送
    • 发布于2018-08-20
    • 举报
    • 评论 1
    • 1
    • 0
sym_cool 回复了 一笔之名也 :只有串口中断呢,没有其他中断 回复

  • 你是中断程序作为接受程序,你要接受周期是0.3M 就得保证中断时间是0.3m, 如果在中断程序内加入其他函数,中断时间就会增加, 很正常啊,

    • 发布于2018-08-20
    • 举报
    • 评论 2
    • 1
    • 0
sym_cool 回复了 szy123 :那个0.3s是指整个字符串的周期,从数据头到0x0A 回复
szy123 回复了 sym_cool :这样啊,那是因为你没接受一个字符,就会多一个else里面的判断语句,所以接受的周期变长了 回复

  • 因为你中断里面有程序需要执行啊,所以程序执行这一部分也是要就算时间的
    • 发布于2018-08-20
    • 举报
    • 评论 0
    • 1
    • 0

  • 如果串口中断中来了其他的中断,那么就时间长了,还要看其他中断的时间也加上的。
    • 发布于2018-08-20
    • 举报
    • 评论 0
    • 1
    • 0

  • 对你的结果表示怀疑,你要把中断设置成优先级最好,并且中断里面只发送数据,再测量一下时间
    • 发布于2018-08-24
    • 举报
    • 评论 0
    • 1
    • 0

  • 首先调用printf()函数来发送串口数据本身就是很慢的,因为printf会连续调用fputc,而fputc每执行一次都要等待串口缓冲区发送完毕。

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

sym_cool 回复了 yhj416606438 :您的意思是printf函数放进中断内会导致中断服务程序的时间超过接收数据的周期吗 回复

  • 我考虑你是不是中断服务函数里的程序太多了,导致一定的延时
    • 发布于2018-08-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 中断里面不要进行这种数据发送的处理,因为发数据会有延时,这种发数据的放到主循环里面去,中断里面可以做一些标志位的修改
    • 发布于2018-08-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的中断优先级设置是不是不一致,导致你的接收和发送函数不一致
    • 发布于2018-09-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 中断是在什么条件下使用的,是不是有系统的,系统中的任务的优先级是不是过高了
    • 发布于2018-09-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的中断优先级要重新设置,有可能是中断优先级相互冲突了
    • 发布于2018-09-19
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

在串口中断中发送数据比在主函数中发送数据慢是怎么回事