[STM32F1] 如何侦测STM32有没有在限定时间内有接受数据?

[复制链接]
 楼主| mike_cow 发表于 2021-12-21 08:51 | 显示全部楼层 |阅读模式
请问,我用STM32F103做一个CAN通讯的数据处理,想实现一个功能就是:要在限定的时间内要收到另一个CAN模块发过来的数据,如果超时,我的CAN就要发一个错误报文出来,有什么好建议吗?

moticsoft 发表于 2021-12-21 12:41 | 显示全部楼层
定时器就可以啊
香水城 发表于 2021-12-21 13:05 | 显示全部楼层
按沙发所言操作就可以。

需要监控CAN信号时,开启定时器计数,如果有CAN数据过来,通过CAN中断来对定时器再次清零或设置相关标志。
full_stack 发表于 2021-12-21 13:40 | 显示全部楼层
收到一帧数据之后定时器计时开始,当再收到时定时器清零,当定时器计数到你说的一段时间,就说明没收到数据,需要发送错误帧。
 楼主| mike_cow 发表于 2021-12-21 14:36 | 显示全部楼层
full_stack 发表于 2021-12-21 13:40
收到一帧数据之后定时器计时开始,当再收到时定时器清零,当定时器计数到你说的一段时间,就说明没收到数据 ...

如果一直没接收到数据,定时器就不会触发;查询pending的返回值为什么不能实现这个功能?
void USB_LP_CAN_RX0_IRQHandler1(void)

{

if((CAN_MessagePending(CAN1,CAN_FIFO0)==0)
{ Delay1(10000000);
can_tx1(0X29,0X11,0X00,0X00,0X00,0X00,0X00,0X00); } }
full_stack 发表于 2021-12-21 22:54 | 显示全部楼层
mike_cow 发表于 2021-12-21 14:36
如果一直没接收到数据,定时器就不会触发;查询pending的返回值为什么不能实现这个功能?
void USB_LP_CA ...

这段代码写到定时器中断里,这个CAN中断写个定时器重新计数的代码
WoodData 发表于 2021-12-22 08:52 | 显示全部楼层
开个定时器,定个时间。收到了就清除定时器,没收到,定时器超时处理。
 楼主| mike_cow 发表于 2021-12-22 09:55 | 显示全部楼层
正常是有心跳数据与其它运行数据过来,频率是1秒一次,
zyj213 发表于 2021-12-31 15:16 | 显示全部楼层
有吧,定时器配合接收中断呗
shjuturt 发表于 2021-12-31 16:01 | 显示全部楼层
定时器计时,接收中断如果到达多久之后,还没响应,就断定超时
ksjdisa 发表于 2021-12-31 16:29 | 显示全部楼层
接收数据超时好像网上有例程,你可以参考看看
ppaakala 发表于 2021-12-31 16:30 | 显示全部楼层
不会用can,话说can和串口是不是类似啊
shskaoanc 发表于 2021-12-31 16:58 | 显示全部楼层
Can的话有啥优势么
hfaouhfoa 发表于 2021-12-31 16:59 | 显示全部楼层
感觉就跟串口收数据超时一样,串口是有个串口中断的

评论

原理是一样的  发表于 2021-12-31 16:59
hdahd 发表于 2021-12-31 17:19 | 显示全部楼层
Can是否有接收中断标记呢?如果有中断标记就好操作多了
qqjmjso 发表于 2021-12-31 17:19 | 显示全部楼层
没用过CAN,不敢乱说,不过肯定是要定时器计数的,剩下那个标记就是can接收标记啦
lalhdo 发表于 2021-12-31 17:34 | 显示全部楼层
你可以查查can的相关资料,看看有没有超时触发的功能
gshhkkk 发表于 2021-12-31 17:34 | 显示全部楼层
感觉就是查看CAN的接收标记,接收之后就清零,没接收到的话就自己做个超时处理
zljiu 发表于 2022-1-10 14:34 | 显示全部楼层
自己开启一个定时器就可以
coshi 发表于 2022-1-10 14:36 | 显示全部楼层
can本身应该没有超时发送的功能吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

11

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部