1、【File--->New---> SPC5 C/C++ Application】创建一个新的工程,命名为【TestCAN1】,平台选择【SPC563Mxx Platform Component RLA】。
2、Platform Settings选择芯片SPC563M64L5。
3、Runtime Settings保持默认。
4、Build Settings保持默认。
5、 Linker Settings保持默认。
6、添加【SPC563Mxx Init Package Component RLA】和 【SPC563Mxx Low Level Drivers Component RLA】。
7、Clock Settings 保持默认。
8、IRQ和OSAL保持默认。
9、使能CAN底层驱动。
10、FlexCAN Settings如下:
11、cfg0设置如下,波特率设置为500kbps。
12、设置CAN的引脚。
13、在main.c中编写代码,代码实现通过CAN1接收任意报文,然后通过CAN1发出,发出的ID比接收的ID增1,数据完全拷贝。
#include "components.h"
#include "can_lld_cfg.h"
#define CAN1_STB_PORT PORT12
#define CAN1_STB_PIN 10
int main(void) {
componentsInit();
can_lld_start(&CAND1,&can_config_cfg0);
pal_writepad(CAN1_STB_PORT,CAN1_STB_PIN,PAL_LOW);
CANRxFrame frame_rx;
CANTxFrame frame_tx;
frame_tx.IDE=0;
frame_tx.DLC=8;
frame_tx.RTR=0;
for(int i=0;i<8;i++)
{
frame_tx.data8[i]=i+1;
}
for ( ; ; ) {
if(can_lld_receive(&CAND1,0,&frame_rx)==CAN_MSG_OK)
{
frame_tx.ID=frame_rx.ID+0x100;
frame_tx.DLC=frame_rx.DLC;
frame_tx.RTR=frame_rx.RTR;
frame_tx.IDE=frame_rx.IDE;
for(int i=0;i<8;i++)
{
frame_tx.data8[i]=frame_rx.data8[i];
}
if(can_lld_is_tx_empty(&CAND1,0))
{
can_lld_transmit(&CAND1,0,&frame_tx);
}
}
}
}