⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can.c

📁 CAN 程序使用MCP2515 由STM32做主芯片控制
💻 C
字号:
/*------------------------------------------------------
FILE NAME   : can.c
DESCRIPTION : CAN FUNTION.
VERSION     : 1.0.0 
AUTHOR      : 
CREATE DATE : 03.12.2009
MODIFY DATE : 04.5.2009
LOGS        :-\ 
--------------------------------------------------------*/
//-----------------Include files-------------------------//
#include "..\header\mcp2515.h"
#include "..\header\can.h"
#include "..\header\hardware.h"
#include "..\header\uart.h"
#include <string.h>
//-----------------Function Prototype--------------------//

//-----------------Variable------------------------------//  
  
//-----------------Function------------------------------//
/*---------------------------------------------------------------
NAME       : can_init(void)
ENTRY  TYPE: unsigned char
RETURN TYPE: 
PURPOSE    : 
VERSION    : 1.0.0
DESCRIPTION: can initialize
CREATE DATE: ---
LOGS       : 1.first create 04.05.2009
-------------------------------------------------------------------------*/ 

unsigned char can_init(void)
{	
	mcp2515_clock();
    mcp2515_reset();
	
	mcp2515_init_can_buffers();
	mcp2515_config_rate();

	//mcp2515_filter_intialize();
	
	return 0;
}

/*---------------------------------------------------------------
NAME       : intit_message_struct
ENTRY  TYPE: void
RETURN TYPE: 
PURPOSE    : 
VERSION    : 1.0.0
DESCRIPTION: message struct initialize, clear the the CAN_MESSAGE struct.
CREATE DATE: ---
LOGS       : 1.first create 04.05.2009
-------------------------------------------------------------------------*/ 
void init_message_struct(CAN_MESSAGE* msg)
{
	memset(msg,0,sizeof(CAN_MESSAGE));
}

/*---------------------------------------------------------------
NAME       : can_send_message(void)
ENTRY  TYPE: unsigned char
RETURN TYPE: 
PURPOSE    : 
VERSION    : 1.0.0
DESCRIPTION: can initialize
CREATE DATE: ---
LOGS       : 1.first create 04.05.2009
-------------------------------------------------------------------------*/ 
unsigned char can_send_message(const CAN_MESSAGE* msg)
{
     unsigned char rec,free_txbuf;


	mcp2515_set_register(MCP_CANINTE,0x00);  //	clear the INT	
//	rec=mcp2515_read_status();
  
//	while(rec&0x04) ;
	mcp2515_get_free_txbuf(&free_txbuf);   //get the free buffer for sending the data;
	mcp2515_write_can_msg(free_txbuf, msg);	//buffer 31h;

	mcp2515_start_transmit();  //start the transmit;
	//mcp2515_rts();

	return 0;	
}

/*---------------------------------------------------------------
NAME       : can_read_message()
ENTRY  TYPE: unsigned char
RETURN TYPE: 
PURPOSE    : 
VERSION    : 1.0.0
DESCRIPTION: can read message
CREATE DATE: ---
LOGS       : 1.first create 04.05.2009
-------------------------------------------------------------------------*/ 
 
unsigned char can_read_message(CAN_MESSAGE *msg)
{
	unsigned char stat, res;
	//char buf[10];
	
	stat = mcp2515_read_status();
	 //send_string_to_uart(buf);
	if ( stat & 0x01 ) {
		// Msg in Buffer 0
		mcp2515_read_can_msg( MCP_RXB0SIDH, msg);	//
		mcp2515_modify_register(MCP_CANINTF, 0x01, 0);		//clear the receive interrupt identify;
		res = 1;
	}
	else if ( stat & 0x02 ) {
		// Msg in Buffer 1
		mcp2515_read_can_msg( MCP_RXB1SIDH, msg);
		mcp2515_modify_register(MCP_CANINTF, 0x02, 0);
		res = 1;
	}
	else {
		res = 0;
	}	
	
	return res;
}

/*---------------------------------------------------------------
NAME       : can debug(void)
ENTRY  TYPE: unsigned char
RETURN TYPE: 
PURPOSE    : 
VERSION    : 1.0.0
DESCRIPTION: can debug
             contain:...
CREATE DATE: ---
LOGS       : 1.first create 04.05.2009
-------------------------------------------------------------------------*/ 

unsigned char can_test_transmit(const unsigned char ext)
{
	CAN_MESSAGE msg;

	init_message_struct(&msg);
	msg.identifier =  0xff;			//ID;
	msg.extended_identifier = ext;
	msg.dlc = 8;				   // the width of the data;
	msg.dta[0] = 0x56;			  //data;
	msg.dta[1] = 0xff;
	msg.dta[2] = 0x78;
	msg.dta[3]=0x55;
	msg.dta[4]=0x89;
	msg.dta[5]=0xab;
	msg.dta[6]=0X00;
	msg.dta[7]=0xbc;
	can_send_message(&msg);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -