转自:http://yiyutingmeng.blog.163.com/blog/static/124258578201191584629146/

我在之前的一篇博客日志中,写过关于CAN发送功能如何使用,但是当时由于时间匆忙,赶项目,按照对USART中断发送的理解,在数据成功发送出去的情况下,写了那篇误人子弟的日志,在这里向大家道歉,实在不好意思,现在我重新阐述下CAN中断发送原理。

1、USART发送中断与CAN发送中断的区别

USART发送中断,是因为发送缓冲区为空,CAN发送中断的中断源是成功(或者abort)发送一次,正是这种区别误导了我。

2、我之前的CAN中断发送的处理方法是,将数据填充到发送缓冲区,由CAN中断提取进行发送,为了启动CAN的发送,我写了一句话CAN->sTxMailBox[0].TIR |= 1;就是启动发送,我以为在这以后CAN执行的动作是:产生中断,将数据从发送缓冲区提取,发送,进入完成中断,判断有无数据,没有就关闭中断,否则继续发送。但是CAN实际执行的动作是:发送,进入发送完成中断,提取数据,发送,进入完成中断,判断有无数据,没有就关闭中断,否则继续发送。由此可见,CAN实际上是多发送了一次数据,这个数据就是当前CAN寄存器里面的数据,而这次发送,应用层和CAN中断程序里都没有参与,所以是不被发现的,这也据解释了为什么对方收到的数据比我发送的数据多,在A发送大量数据的时候,B做应答,但是每次都请求发送,由于速度快,B每次实际发送了同样的数据给A,A所以收到 很多相同的数据。

3、解决办法,就是应用层调用CAN发送数据时,将数据填充到缓冲区,使能中断,但是不请求发送,因为使能中断,在中断里面发送,发送完毕后关闭中断。这里有两点需要注意:1是第一次的时候没有所谓的发送完成中断,所以程序开始要产生一个发送完成中断,以启动发送中断,第二就是为了使用中断发送,在发送中断函数里,要判断当前是否有数据发送,有的话可以清除中断标志,没有的话只能关闭中断,不能清除中断,否则下次据没法发送了。

转载于:https://www.cnblogs.com/shirishiqi/p/5355838.html

STM32F103 CAN中断发送功能的再次讨论相关推荐

  1. 【HAL库】STM32F407ZGT6实现串口中断发送和接收

    ** [HAL库]STM32F407ZGT6实现串口中断发送和接收 (保姆级教写代码1) ** 前言 根据近期所做的项目,想给大家分享一些有关STM32的各类通信方式的代码教程,都是基于STM32HA ...

  2. Spring Boot最新版集成邮件发送功能大全

    Spring Boot最新版集成邮件发送功能大全 前言 一.开启SMTP服务并获取授权码 二.创建Spring Boot项目 1.配置邮箱基本信息: 2.简单邮件发送: 3.发送带附件的邮件: 5.使 ...

  3. php调用nexmo发送短信,在 Laravel 中 “规范” 的开发短信验证码发送功能

    Laravel简介 Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行 ...

  4. NET开发邮件发送功能的全面教程(含邮件组件源码)(

    天,给大家分享的是如何在.NET平台中开发"邮件发送"功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下. AD:2013云计算架构师峰会精彩课程曝光 ...

  5. .NET开发邮件发送功能的全面教程(含邮件组件源码)

    今天,给大家分享的是如何在.NET平台中开发"邮件发送"功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2 ...

  6. [转].NET开发邮件发送功能的全面教程(含邮件组件源码)

    转载自http://www.cnblogs.com/heyuquan/p/net-batch-mail-send-async.html 今天,给大家分享的是如何在.NET平台中开发"邮件发送 ...

  7. 简单聊下STM32F103的中断

    中断 当cpu在执行指令时,遇到一些突发状况,不得不先处理这些突发状况,处理完毕后再返回原来执行指令处继续执行,这里的突然状况被称为中断或异常. 中断示意图如下: STM32F103的中断系统很强大, ...

  8. ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收

    串口发送部分代码: //通过信号量的方法发送数据 void usart1SendData(CPU_INT08U ch) {OS_ERR err;CPU_INT08U isTheFirstCh;OSSe ...

  9. android notification 定时显示,Android编程使用Service实现Notification定时发送功能示例...

    本文实例讲述了android编程使用service实现notification定时发送功能.分享给大家供大家参考,具体如下: /** * 通过启动或停止服务来管理通知功能 * * @descripti ...

最新文章

  1. Oracle学习笔记--第2章 oracle 数据库体系结构
  2. aaaaaaaaaaa
  3. [Android] 开发第六天
  4. 如何快速增加pdf书签,解除pdf限制
  5. 11-直接内存 Direct Memory
  6. UVA 11210 Chinese Mahjong
  7. BZOJ4318: OSU!
  8. Android 如何测试你的Base64是否正确展示
  9. React-native项目中如何使用阿里字体库呢?
  10. 友好的可视化工具——trelliscope
  11. 【接口文档】微信支付现金红包未开通,公众号发红包用第三方红包代发接口
  12. B - 最少硬币问题
  13. 《Windows 8 权威指南》——2.7 降低功耗,延长续航时间才是王道
  14. element步骤条实战
  15. 【技术晨读】EAV or JSON
  16. tf.round(): 四舍六入五取偶
  17. 设置MySQL数据库允许root用户任意IP地址访问(linux)
  18. 微信小程序复制对象json
  19. wshop微信商城数据库结构简要解析
  20. 广义相对论基础【3】平移联络

热门文章

  1. unity3d 2019中文版
  2. @ConfigurationProperties与@Value的区别
  3. 浅谈promise用es5实现
  4. (一)MVC5干货篇,目录和路由
  5. yourtour的几种链接
  6. 【翻译】(5)Android.mk File
  7. java正则表达式入门文档
  8. 广东春运安保工作提前10天启动
  9. 2018年企业运维开发经典面试题
  10. Python每日一练0018