飞思卡尔MC9S12X:CAN初始化配置
飞思卡尔MC9S12X:CAN发送配置
飞思卡尔MC9S12X:CAN接收配置
飞思卡尔MC9S12X:CAN驱动函数在主函数中的应用

关于CAN驱动的配置,我已经有详细的介绍了。
接下来主要介绍之前配置的CAN驱动函数在主函数中的应用。


一、CAN驱动函数

1. CAN初始化函数

具体详细介绍:飞思卡尔MC9S12X:CAN初始化配置

void INIT_MSCAN0(void);

2. CAN发送函数

具体详细介绍:飞思卡尔MC9S12X:CAN发送配置

int MSCAN0_Send(struct can_msg msg);

3. CAN接收函数

具体详细介绍:飞思卡尔MC9S12X:CAN接收配置

int MSCAN0_Receive(struct can_msg msg);

二、CAN驱动函数在主函数中的应用

以上已经详细介绍了CAN驱动函数的配置,但是具体怎么使用我们还不知道,接下来具体介绍CAN驱动函数在主函数中的应用。

具体代码如下:

/*
其他调用和宏定义已省略
*/
#include "CAN.h"  //调用CAN驱动文件
#include "CAN0_CSS.h" //调用CAN数据处理文件typedef struct can_msg     //定义报文的结构体
{unsigned long ID;      //扩展帧IDunsigned int id;     //标准帧idunsigned char RTR;       // RTR: 1为远程帧,0为数据帧unsigned char data[8];   //帧数据unsigned char len;     //数据长度unsigned char prty;       //优先级
};struct can_msg  msg_send, msg_get;    //定义接收和发送结构体变量/*
初始化锁相环和初始化ECT模块已省略
*//*************************************************************/
/*                         延时函数                          */
/*************************************************************/
void delay1ms(unsigned int n)
{unsigned int i;for(i=0;i<n;i++) {TFLG1_C0F = 1;              //清除标志位TC0 = TCNT + 250;           //设置输出比较时间为1mswhile(TFLG1_C0F == 0);      //等待,直到发生输出比较事件}
}
/*************************************************************/
/*                      中断接收函数                         */
/*************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt CAN_receive(void)
{if(MSCAN0_Receive(msg_get)) {Can0ReceiveDataAnalysis(msg_get);     //对CAN接收的数据进行处理}
}
#pragma CODE_SEG DEFAULT/*************************************************************/
/*                        主函数                             */
/************************************************************/
void main(void)
{/*其他初始化函数省略*/INIT_CAN0();//初始化CANfor(;;) {Can0Send_data(); //CAN数据发送函数delay1ms(500);}
}

以下是CAN数据处理函数,写到CAN数据处理文件CAN0_CSS.c中,主函数直接调用。

/*************************************************************/
/*                   CAN接收处理函数                         */
/***********************************************************/
void Can0ReceiveDataAnalysis(can_msg msg)
{if(msg.id==0x001)//对不同ID的数据进行处理{if(msg.data[0]==0x01){//相对应的操作:灯亮}else    {//相对应的操作:灯灭}}}
/*************************************************************/
/*                   CAN发送处理函数                         */
/***********************************************************/
void Can0Send_data(void)    //举例发送标准帧id:0x001
{can_msg msg = {0,0,0,{0x00,0x001,0x00,0x00,0x00,0x00,0x00,0x00},0,0};         //报文unsigned char data[8]={0,1,2,3,4,5,6,7};msg.id = 0x001;       //设置idmsg.RTR = 0;     // RTR: 1为远程帧,0为数据帧msg.len = 8;        //设置数据长度    //对数据赋值,加上强制转换不会出错msg.data[0] = (unsigned char) data[0];msg.data[1] = (unsigned char) data[1];msg.data[2] = (unsigned char) data[2];msg.data[3] = (unsigned char) data[3];msg.data[4] = (unsigned char) data[4];msg.data[5] = (unsigned char) data[5];msg.data[6] = (unsigned char) data[6];msg.data[7] = (unsigned char) data[7];msg.prty=1;  //设置优先级MSCAN0_Send(msg);    //将以上设置的数据发送出去
}

点击下载,关于MSCAN寄存器的详细中文介绍

飞思卡尔MC9S12X:CAN驱动函数在主函数中的应用相关推荐

  1. 飞思卡尔MC9S12X PWM驱动

    今天带着大家学习飞思卡尔MC9S12X PWM驱动 首先什么是PWM及应用 脉冲宽度调制(PWM)是产生精确脉冲序列输出和实现D/A转换的有效方法,微控制器的脉宽调制模块被广泛应用于工业控制和新型消费 ...

  2. 飞思卡尔MC9S12X Flash驱动

    今天带着大家学习下飞思卡尔MC9S12  Flash驱动 在现今的经济社会,比拼的"快"不仅仅是速度快,更是效率高.身处社会分工细致的今天,让自己更快效率更高是有方法的. 每一家M ...

  3. 飞思卡尔MC9S12X CAN驱动

    今天带着大家学习下MC9S12XS  CAN驱动模块开发.首先先了解下什么CAN,用途. CAN总线的概念: CAN是控制器局域网络(Controller Area Network)的简称,是由研发和 ...

  4. 飞思卡尔MC9S12X:CAN接收配置

    飞思卡尔MC9S12X:CAN初始化配置 飞思卡尔MC9S12X:CAN发送配置 飞思卡尔MC9S12X:CAN接收配置 飞思卡尔MC9S12X:CAN驱动函数在主函数中的应用 一.MSCAN接收流程 ...

  5. 飞思卡尔MC9S12X:CAN发送配置

    飞思卡尔MC9S12X:CAN初始化配置 飞思卡尔MC9S12X:CAN发送配置 飞思卡尔MC9S12X:CAN接收配置 飞思卡尔MC9S12X:CAN驱动函数在主函数中的应用 一.MSCAN发送流程 ...

  6. 飞思卡尔MC9S12X:CAN初始化配置

    飞思卡尔MC9S12X:CAN初始化配置 飞思卡尔MC9S12X:CAN发送配置 飞思卡尔MC9S12X:CAN接收配置 飞思卡尔MC9S12X:CAN驱动函数在主函数中的应用 一.MSCAN初始化流 ...

  7. 飞思卡尔MC9S12X PIT模块

    今天带着大家学习了解下飞思卡尔MC9S12XS PID模块. PIT模块概述 周期性中断定时器(Periodic Interrupt Timer,PIT)模块是一组24位的定时器,由8位微定时器和16 ...

  8. c语言实现函数给主函数中的指针赋值的方法

    //利用二维指针.自从学了c之后,还没怎么用过二维指针,这么算是记住了 /* c语言实现函数给主函数中的指针赋值的方法*/#include<stdio.h>void f (int **p) ...

  9. 关于调用子函数给主函数指针分配内存

    典型的错误例子如下 在这个主函数的指针给子函数传递一个指针,而在子函数中形参有开辟了一块内存,此子函数的指针的内存里存储的地址与主函数是同一地址, 即主函数的指 针和子函数形参的指针都指向同一块内存的 ...

最新文章

  1. 对标Bert?刷屏的GPT 2.0意味着什么
  2. 豆瓣评分 9.3 的 Java 巨著 | Bruce Eckel 重讲 Java 的编程思想
  3. android 7.0独立升级,爆料:Android 7.0用户将可自行升级!
  4. java编译机制_java的编译机制
  5. java 内存分析 ibm_IBM内存检测工具(IBM Thread and Monitor Dump Analyzer for Java)
  6. 无线条码仓库管理系统
  7. selenium自动化购买火车票+存储数据库
  8. Deep metric learning 深度度量学习 总结
  9. uniapp路线规划
  10. 品牌建设—长效且动态的关系管理进程:赫联电子亚太区
  11. FreeWheel创始人/CTO于晶纯访谈:具备大局观方能洞若观火
  12. 2017中国大学生计算机设计大赛总结
  13. 暑假的计划【写在这里,监督自己】
  14. 2019年9月总结,10月展望
  15. 剑指Offer LeetCode 面试题58 - II. 左旋转字符串
  16. 服务器系统运行群晖,使用Synology的NAS系统当DNS服务器
  17. FAST迅捷FW150US无线网卡安装说明
  18. 这58张图片,能让你笑出八块腹肌!
  19. 贪嗔痴慢疑 什么是绮语、两舌、恶口?
  20. localStorage自定义存储数据方法及其使用总结

热门文章

  1. Linux集群间免密登录
  2. word2vec原理分析与代码公式详解
  3. ECP5701:TypeC PD取电,SINK,诱电,受电芯片
  4. http response code(HTTP状态码对照表)
  5. Idea下载后打不开
  6. Octave常用函数
  7. 用计算机按数字铃声,利用计算机自带功能设置校园和谐铃声
  8. 36条人情世故 +8式大学法则+10招助=成功推进器-助你三十而立
  9. 五星级酒店客房无线网络覆盖WOC方案及施工图片
  10. XP桌面上伪IE图标删除方法