单片机/MCUwilliam hill官网
直播中

李桂兰

7年用户 1474经验值
私信 关注

想用TC275的一个CAN节点往外发不同周期(10ms的、20ms的、50ms的)的报文,如何实现呢?

想用TC275的一个CAN节点往外发不同周期(10ms的、20ms的、50ms的)的报文,如何实现?CAN模块我已经配置好了,可以多多条不同ID的message,但现在是有些报文周期是10ms,有些是20ms,50ms,那我如何实现不同周期的发送呢?我想了个方法是用系统定时器STM,分别定时10ms、20ms、50ms等然后进中断,在各个中断函数里实现对应时间周期的报文发送?大家还有什么其他方法吗?因为现在程序还是裸跑,没有上操作系统,不能时间片。                                                                                                                                                                                                                                                                                                                                                                                                        
                          

回帖(2)

武妹

2024-2-6 14:33:05
就弄个10ms中断啊,然后设个cnt变量, 每次cnt累加, cnt %2 == 0, 就发20ms的message, cnt %5 ==0  就发50ms的         
举报

淡淡的爱

2024-2-6 16:05:46
你的方法是可行的,在不借助操作系统的情况下,可以利用系统定时器STM来实现不同周期的报文发送。

具体实现步骤可以参考如下:

1. 配置STM模块,使其按照最小周期的报文发送周期进行触发。比如你的最小周期是10ms,那么可以将STM配置为每10ms触发一次中断。

2. 编写不同报文周期的发送函数,分别对应10ms、20ms和50ms的报文。

3. 在中断服务函数中,根据当前的STM计数值,判断需要发送哪个周期的报文。如果STM计数值能被10整除,则调用10ms报文发送函数;如果STM计数值能被20整除,则调用20ms报文发送函数;以此类推。

这样就能实现不同周期的报文发送。需要注意的是,STM计数值的最大值需要根据不同的周期进行调整,确保在最长周期下不会溢出。
1 举报
  • jf_67360329: 这种机制也存在问题,假如有30条不同周期的报文,其中20ms的有10条,那么10ms的有20条,那么在能被20ms整除的时候,10ms的也要全部都能发送,这个时候就有问题。

更多回帖

发帖
×
20
完善资料,
赚取积分