飞思卡尔MC9S12X:CAN驱动函数在主函数中的应用
飞思卡尔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驱动函数在主函数中的应用相关推荐
- 飞思卡尔MC9S12X PWM驱动
今天带着大家学习飞思卡尔MC9S12X PWM驱动 首先什么是PWM及应用 脉冲宽度调制(PWM)是产生精确脉冲序列输出和实现D/A转换的有效方法,微控制器的脉宽调制模块被广泛应用于工业控制和新型消费 ...
- 飞思卡尔MC9S12X Flash驱动
今天带着大家学习下飞思卡尔MC9S12 Flash驱动 在现今的经济社会,比拼的"快"不仅仅是速度快,更是效率高.身处社会分工细致的今天,让自己更快效率更高是有方法的. 每一家M ...
- 飞思卡尔MC9S12X CAN驱动
今天带着大家学习下MC9S12XS CAN驱动模块开发.首先先了解下什么CAN,用途. CAN总线的概念: CAN是控制器局域网络(Controller Area Network)的简称,是由研发和 ...
- 飞思卡尔MC9S12X:CAN接收配置
飞思卡尔MC9S12X:CAN初始化配置 飞思卡尔MC9S12X:CAN发送配置 飞思卡尔MC9S12X:CAN接收配置 飞思卡尔MC9S12X:CAN驱动函数在主函数中的应用 一.MSCAN接收流程 ...
- 飞思卡尔MC9S12X:CAN发送配置
飞思卡尔MC9S12X:CAN初始化配置 飞思卡尔MC9S12X:CAN发送配置 飞思卡尔MC9S12X:CAN接收配置 飞思卡尔MC9S12X:CAN驱动函数在主函数中的应用 一.MSCAN发送流程 ...
- 飞思卡尔MC9S12X:CAN初始化配置
飞思卡尔MC9S12X:CAN初始化配置 飞思卡尔MC9S12X:CAN发送配置 飞思卡尔MC9S12X:CAN接收配置 飞思卡尔MC9S12X:CAN驱动函数在主函数中的应用 一.MSCAN初始化流 ...
- 飞思卡尔MC9S12X PIT模块
今天带着大家学习了解下飞思卡尔MC9S12XS PID模块. PIT模块概述 周期性中断定时器(Periodic Interrupt Timer,PIT)模块是一组24位的定时器,由8位微定时器和16 ...
- c语言实现函数给主函数中的指针赋值的方法
//利用二维指针.自从学了c之后,还没怎么用过二维指针,这么算是记住了 /* c语言实现函数给主函数中的指针赋值的方法*/#include<stdio.h>void f (int **p) ...
- 关于调用子函数给主函数指针分配内存
典型的错误例子如下 在这个主函数的指针给子函数传递一个指针,而在子函数中形参有开辟了一块内存,此子函数的指针的内存里存储的地址与主函数是同一地址, 即主函数的指 针和子函数形参的指针都指向同一块内存的 ...
最新文章
- 对标Bert?刷屏的GPT 2.0意味着什么
- 豆瓣评分 9.3 的 Java 巨著 | Bruce Eckel 重讲 Java 的编程思想
- android 7.0独立升级,爆料:Android 7.0用户将可自行升级!
- java编译机制_java的编译机制
- java 内存分析 ibm_IBM内存检测工具(IBM Thread and Monitor Dump Analyzer for Java)
- 无线条码仓库管理系统
- selenium自动化购买火车票+存储数据库
- Deep metric learning 深度度量学习 总结
- uniapp路线规划
- 品牌建设—长效且动态的关系管理进程:赫联电子亚太区
- FreeWheel创始人/CTO于晶纯访谈:具备大局观方能洞若观火
- 2017中国大学生计算机设计大赛总结
- 暑假的计划【写在这里,监督自己】
- 2019年9月总结,10月展望
- 剑指Offer LeetCode 面试题58 - II. 左旋转字符串
- 服务器系统运行群晖,使用Synology的NAS系统当DNS服务器
- FAST迅捷FW150US无线网卡安装说明
- 这58张图片,能让你笑出八块腹肌!
- 贪嗔痴慢疑 什么是绮语、两舌、恶口?
- localStorage自定义存储数据方法及其使用总结