IDE:MPLAB
编译器:xc8
调试器:PICkit4
芯片:PIC8F28K83
1.创建空项目
2.安装MCC(官网下载,根据教程安装),安装完之后会有如下的图标
3.点击MCC,打开代码生成器
4.系统模块配置时钟
5.找到CAN,双击,则在Project Resource看到如下画面
6.配置波特率(CAN BUS Speed,这里与CAN收发器的波特率要相等,不然不能建立通信)
7.点击生成代码按钮,然后再次点击MCC,退出寄存器配置界面
8.可以看到项目中已经生成了好多文件,包括main.c
9.自发自收(调用生成的API函数)
void main(void)
{
//dSTANDARD_CAN_MSG_ID_2_0B 标准帧
//dEXTENDED_CAN_MSG_ID_2_0B 扩展帧
uCAN_MSG canRMsg;
canRMsg.frame.idType = dSTANDARD_CAN_MSG_ID_2_0B;
canRMsg.frame.id = 0x124;
canRMsg.frame.dlc = 8;
canRMsg.frame.data0 = 0x00;
canRMsg.frame.data1 = 0x01;
canRMsg.frame.data2 = 0x02;
canRMsg.frame.data3 = 0x01;
canRMsg.frame.data4 = 0x04;
canRMsg.frame.data5 = 0x05;
canRMsg.frame.data6 = 0x06;
canRMsg.frame.data7 = 0x07;
SYSTEM_Initialize();
while (1)
{
// Add your application code
if(CAN_receive(&recMsg))
{
CAN_transmit(&canRMsg);
}
__delay_ms(1000);
}
}
附件:
1、函数API描述
函数名称 | 参数 | 返回值 | 描述 |
---|---|---|---|
ECAN_Initialize() | – | – | 这个例程根据GUI中设置的参数设置所有ECAN“模块寄存器(过滤器、掩码和定时)的值。使ECAN“处于配置模式,然后在初始化ECAN”寄存器后切换到正常模式。 |
CAN_sleep() | – | – | 该例程在将ECA设置为睡眠模式之前启用来自总线活动的唤醒功能。 |
CAN_transmit() | *tempCanMsg | 如果消息被加载来传输缓冲区,返回为true,否则返回False。 | 根据优先级查找空的传输缓冲区。将转换后的原始ID、DLC和八个数据字节的值写入相应的寄存器后,设置传输请求状态(TXREQ)位。 |
CAN_receive() | *tempCanMsg | 如果接收到消息,返回true;否则返回false | 接收CAN信息 |
CAN_messagesInBuffer() | — | 缓冲区消息总数 | 检查缓冲区中的消息数量 |
CAN_isBusOff() | 如果CAN总线关闭则为true,否则为false | 检查是否打开BUS-Off模式 | |
CAN_isRXErrorPassive() | 如果模块处于接收错误状态,则返回true。否则返回False。 | 检查模块是否接收错误 |
2、发送示意图(官网有源文件,可以去官网下载)
3、接收示意图