历史上的今天

今天是:2024年09月30日(星期一)

正在发生

2019年09月30日 | CAN总线发送与接收函数

发布者:liliukan 来源: eefocus关键字:CAN总线  发送  接收函数 手机看文章 扫描二维码
随时随地手机看文章

初始化CAN模块

void INIT_CAN0(void) 

{

  if(CAN0CTL0_INITRQ==0)       // 查询是否进入初始化状态   

    CAN0CTL0_INITRQ =1;        // 进入初始化状态

  while (CAN0CTL1_INITAK==0);  //等待进入初始化状态

 

  CAN0BTR0_SJW = 0;            //设置同步

  CAN0BTR0_BRP = 7;            //设置波特率  

  CAN0BTR1 = 0x1c;             //设置时段1和时段2的Tq个数 ,总线频率为250kb/s

                               // 关闭滤波器                                  

  CAN0IDMR0 = 0xFF;

  CAN0IDMR1 = 0xFF;

  CAN0IDMR2 = 0xFF;

  CAN0IDMR3 = 0xFF;

  CAN0IDMR4 = 0xFF;

  CAN0IDMR5 = 0xFF;

  CAN0IDMR6 = 0xFF;

  CAN0IDMR7 = 0xFF; 

 

  CAN0CTL1 = 0xC0;             //使能MSCAN模块,设置为一般运行模式、使用外部晶振,使用总线时钟源 

  CAN0CTL0 = 0x00;             //返回一般模式运行

  while(CAN0CTL1_INITAK);      //等待回到一般运行模式

  while(CAN0CTL0_SYNCH==0);    //等待总线时钟同步

  CAN0RIER_RXFIE = 1;          //禁止接收中断

}



发送函数

Bool MSCAN0SendMsg(struct can_msg msg)

{

  unsigned char send_buf, sp;

    

  if(msg.len > 8)                 // 检查数据长度

    return(FALSE);  

  if(CAN0CTL0_SYNCH==0)           // 检查总线时钟

    return(FALSE);

  send_buf = 0;

  do

  {   

    CAN0TBSEL=CAN0TFLG;           // 寻找空闲的缓冲器

    send_buf=CAN0TBSEL;

  } 

  while(!send_buf);                                 

  CAN0TXIDR0 = (unsigned char)(msg.id>>3);// 写入标识符

  CAN0TXIDR1 = (unsigned char)(msg.id<<5);

  

  if(msg.RTR)   

    CAN0TXIDR1 |= 0x10;           // RTR = 阴性

     

  for(sp = 0; sp < msg.len; sp++) // 写入数据

    *((&CAN0TXDSR0)+sp) = msg.data[sp];

   

  CAN0TXDLR = msg.len;            // 写入数据长度    

  CAN0TXTBPR = msg.prty;          // 写入优先级  

  CAN0TFLG = send_buf;            // 清 TXx 标志 (缓冲器准备发送) 

  return(TRUE);  

}


接收函数



Bool MSCAN0GetMsg(struct can_msg *msg)

{

  unsigned char sp2;

  

  if(!(CAN0RFLG_RXF))            // 检测接收标志

    return(FALSE);                             

  if(CAN0RXIDR1_IDE)             // 检测 CAN协议报文模式 (一般/扩展) 标识符

    // IDE = Recessive (Extended Mode)

    return(FALSE);                               

  msg->id = (unsigned int)(CAN0RXIDR0<<3) // 读标识符|

            (unsigned char)(CAN0RXIDR1>>5); 

  if(CAN0RXIDR1&0x10)

    msg->RTR = TRUE;

  else

    msg->RTR = FALSE;                                   

  msg->len = CAN0RXDLR;            // 读取数据长度                                  

  for(sp2 = 0; sp2 < msg->len; sp2++)// 读取数据

    msg->data[sp2] = *((&CAN0RXDSR0)+sp2);                              

  CAN0RFLG = 0x01;                  // 清 RXF 标志位 (缓冲器准备接收)

  return(TRUE);

}

关键字:CAN总线  发送  接收函数 引用地址:CAN总线发送与接收函数

上一篇:stm32的can总线理解及应用——程序对应stm32f103系列
下一篇:STM32之CAN系列经验总结

推荐阅读

一块指甲盖大小的芯片,从设计到制造,需要技术密集的工艺线以及高度的国际协作。当某个产业链条出现变化,这个经历中国几代人投入和巨量资源支持的行业系统便会发生连锁反应。 从阿里、格力等跨界者入局、外资入华到集成电路大基金二期募资、VC机构风向突变,种种迹象表明,2018年以来,集成电路这个集技术、资金、人才挑战性于一体的行业热度正在持续升...
华为宣布进军汽车产业已经有一段时间,进展也引人关注。目前华为发布的level 4级别的自动驾驶再一次展现了其技术团队的硬实力。 事件主体:华为技术有限公司是一家生产销售通信设备的民营通信科技公司,于1987年正式注册成立,总部位于中国广东省深圳市龙岗区坂田华为基地。华为是全球领先的信息与通信技术(ICT)解决方案供应商,专注于ICT领域,坚持稳...
今天中午,@OPPO 智美生活官方分享了一段视频,OPPO TV 联合 8KRAW 出品,用 4K 120 FPS 超高清画面,横跨天南地北,穿越春夏秋冬,带你领略色彩中国,谨以此片献礼新中国成立七十一周年。  在视频最后,OPPO即将发布的首款智能电视也露出真容,这款电视采用了极窄边的设计,并且还有一枚摄像模组,推测会采用弹出式设计,机身下边框...
近日由于电力供应持续紧张,多个省市地区采取了限电措施。此前据集微网消息,苹果和特斯拉的几家关键供应商已经宣布中国厂区停产,在新款 iPhone 等电子产品旺季期间,供应链的稳定性将面临风险。  据老板联播报道,苹果客服对此表示,目前并没有对 iPhone 送达时间产生影响,大可放心购买。目前上海的几家门店,以及周边苏州、无锡门店都没...

史海拾趣

问答坊 | AI 解惑

单片机同样可以像PLC那样有个外壳。下面就可以看到

20点数字量、4点模拟量单片机控制器 JMDM-20DIO4AIO控制器说明书 特性: 一.8位高性能单片机作为主控制芯片,六倍于普通单片机的速度; 二.主电源采用9V交流电,也可以采用12V直流电; 三:12路光电隔离数字量输入,NPN输入型式,输 ...…

查看全部问答∨

RS232toRS485转换电路

RS232toRS485转换电路…

查看全部问答∨

3.5液晶

今天收到一块3.5寸液晶屏,一时想不到做什么,请大家给个建议…

查看全部问答∨

电力行业企业高薪招聘嵌入式开发人员!!

    欢迎满足以下条件之一的有识之士与我们联系,公司网址:     www.nerc.com.cn,发送简历邮箱地址:whl668@epri.ac.cn。     1.具有2年以上电力行业嵌入式产品开发经验。         2. ...…

查看全部问答∨

高分求教i2c怎样写入EEPROM(内部寄存器地址大于254地址)?

i2c怎样写入EEPROM(内部寄存器地址大于254地址)? 254的时候是8bit全1即FF的时候 请问255这个时候这地址应该怎样写入呢?我是先发送255的(1 0000 0000)“1”高字节位,等待一个响应,在发后面的“0000 0000”一个响应 这样发送对吗? 如 ...…

查看全部问答∨

智能视频分析工程师

招聘智能视频分析工程师 要求: 计算机、电子、自控类相关专业本科以上学历; 2 年以上视频压缩编解码或数字视频处理领域开发工作经验; 数学功底较强,逻辑清晰, C 语言编程良好,熟练使用 VC++,MFC 等仿真工具 熟悉 H.264/MPEG4 视频编码标准, ...…

查看全部问答∨

计算机专业女学生就职困惑.....

我是计算机专业一名女学生,虽然已经大三了,可似乎对计算机还是一窍不通,不知道该怎么办..... 可我还是想从事计算机方面有技术性的工作(对于文员,平面设计之类又没什么兴趣)...... 我想从现在开始努力,可我不知道应该朝哪个方向开哪那个 ...…

查看全部问答∨

EVC4+SP4开发环境配置遇到难题,哪位指点一下?

我安装了activeSync 4.5,然后是evc4、sp4和ppc 2003 模拟器,activesync无论如何都发现不了模拟器程序。我在网上看到的说安装activesync之后还要安装一个connect activesync with emulator的工具,我安装了,但是里面那个EmuAS.exe运行不起来,说 ...…

查看全部问答∨

带什么眼镜看3D?

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 阿凡达还没正式下凡前,3D视频就已经在CES上疯狂了一把,好像一夜之间,2D已经是昨日黄花,只待作为历史的一件旧物,象无数过去的时尚一样迅速被新潮流淹没。人们正在习惯这样一些新闻:ESPN使 ...…

查看全部问答∨

关于led程序的问题,求助

// 定义指示灯寄存器地址和寄存器类型 // 子程序接口 //void Delay(unsigned int nDelay);        // 延时子程序 //#include \\"Delay.c\\" //#include \\"DPPL_init.c\\" //#include \\"sdram_init.c\\" ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved