找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1502|回复: 12
收起左侧

问下大家个问题,单片机串口中断采用定时器超时接收方式

[复制链接]
ID:630212 发表于 2023-6-29 16:47 | 显示全部楼层 |阅读模式
50黑币
串口中断定时器超时接收,串口优先级和定时器优先级怎样设置好?是一个抢占0子1一个抢占0子2这样的好,还是一个抢占0子1一个抢占1子1这样的好?对程序有什么影响?

回复

使用道具 举报

ID:883242 发表于 2023-6-29 20:22 | 显示全部楼层
都一样,两者都分轻重缓急。
回复

使用道具 举报

ID:624769 发表于 2023-6-29 20:30 来自手机 | 显示全部楼层
判断接收超时,不用设置优先级,最低优先即可。
回复

使用道具 举报

ID:213173 发表于 2023-6-29 21:31 | 显示全部楼层
串口接收超时没有多么讲究,大概2~3ms没有收到数据即可判断接收完毕。只要程序不是写得怪怪的,不必考虑优先级。
回复

使用道具 举报

ID:161164 发表于 2023-6-29 22:39 | 显示全部楼层
2023-06-29_223836.png
大致上是这样
回复

使用道具 举报

ID:630212 发表于 2023-6-30 09:07 | 显示全部楼层
本帖最后由 Xiuer66 于 2023-6-30 10:03 编辑

我用按键外部中断向外发送数据,只发送没有接收,按键按一下,串口就发送10字节的一个数据,没有用到定时器,外部中断优先级抢占1子0 串口抢占2子0 这样有可能会卡住,外部中断优先级抢占1子0 串口抢占1子1这样就不会卡住,外部中断正常,串口异常不能发送数据,是因为外部中断优先级抢占1子0 串口抢占2子0这样外部中断有可能打断串口中断而导致之后的串口中断异常吗?外部中断优先级抢占1子0 串口抢占1子1,串口中断执行中就不会被外部中断打断,等串口中断执行完,外部中断才会执行,所以不会异常?
回复

使用道具 举报

ID:1034262 发表于 2023-6-30 09:50 | 显示全部楼层
慢速事件,我都不开优先级。
回复

使用道具 举报

ID:161164 发表于 2023-6-30 11:35 | 显示全部楼层
Xiuer66 发表于 2023-6-30 09:07
我用按键外部中断向外发送数据,只发送没有接收,按键按一下,串口就发送10字节的一个数据,没有用到定时器 ...

2023-06-30_113427.png
回复

使用道具 举报

ID:1086796 发表于 2023-7-1 21:15 | 显示全部楼层
一种常见的做法是将串口中断设置为高优先级,将定时器中断设置为低优先级。这样可以确保在串口接收到数据时能够及时响应,并且不会因为定时器中断而延迟处理串口数据。  在这种设置下,串口中断具有高优先级,可以抢占正在执行的定时器中断。这意味着如果在定时器中断处理期间发生了串口中断,系统会立即切换到串口中断处理程序,完成串口数据的接收和处理。然后,再返回到定时器中断处理程序继续执行。  相比之下,如果将两个中断都设置为相同的优先级,例如都是抢占优先级0,子优先级1,那么在定时器中断处理期间发生的串口中断将无法立即得到处理,而必须等待定时器中断处理完成后才能处理串口中断。这可能会导致串口数据的丢失或延迟处理。  总的来说,将串口中断设置为高优先级,将定时器中断设置为低优先级,可以确保及时处理串口数据,提高系统的响应能力。而将两个中断都设置为相同的优先级可能会导致串口数据的延迟处理或丢失。但是具体的设置还需要根据实际应用的需求和系统的整体设计来进行权衡和调整。
回复

使用道具 举报

ID:1085441 发表于 2023-7-2 01:31 | 显示全部楼层
最好不要用多个中断,程序容易出问题。只用一个定时器中断,串口尽可能用查询方式。
回复

使用道具 举报

ID:213173 发表于 2023-7-2 09:29 | 显示全部楼层
Xiuer66 发表于 2023-6-30 09:07
我用按键外部中断向外发送数据,只发送没有接收,按键按一下,串口就发送10字节的一个数据,没有用到定时器 ...

用外部中断作按键输入本身就不是一种好的选择,在外部中断函数里运行串口发送程序更是给自己挖坑。把P3.2改为普通按键输入口就没有这些麻烦了。
回复

使用道具 举报

ID:291668 发表于 2023-7-2 14:12 | 显示全部楼层
中断和定时器同时用,中断级别要高一些。定时器次之。对程序的影响要看具体执行的动作及复杂性。一般影响不大。
回复

使用道具 举报

ID:1086796 发表于 2023-7-2 15:41 | 显示全部楼层
串口中断和定时器中断的优先级设置需要根据具体的应用场景和要求来确定。下面是两种常见的优先级设置方式及其可能的影响:  串口抢占定时器:通过将串口中断的优先级设置为高于定时器中断,可以确保在接收到串口数据时能够立即中断并处理。这种设置可以有效地处理实时性要求较高的串口通信任务,但可能会对定时器的周期性执行产生一定的影响,因为定时器中断可能会被串口中断所抢占。  定时器抢占串口:通过将定时器中断的优先级设置为高于串口中断,可以确保定时器按照预定的周期继续执行,而不受串口中断的影响。这种设置适用于对定时器中断的周期性执行要求较高的场景,但可能会延迟串口中断的处理时间,对实时性要求较高的串口通信任务可能受到一定的影响。  具体选择哪种优先级设置方式取决于应用的需求和优先级分配。需要权衡实时性、稳定性和其他任务的执行需求,以确定最合适的设置方案。同时,还需要注意合理设计中断服务程序,以尽量减少中断处理时间,避免对整体程序的性能产生过大的影响。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表