STM32F4-DISCO CAN的验证

/ 0评 / 0

为什么叫CAN的验证,因为我这里并没用环回模式,但也没两个板子,就算有两个板子,也不知道是否适合STM32以外的系统,就算是不适合的系统,如果出现问题,都不知道怪谁,所以,只好搞了个USB-CAN转换器.因为博主很穷,所以只好搞了个弱逼的USB-CAN,其他应该大同小异.

QQ截图20150913183914

的其实这货里面就CP2102啊,还有一个PIC单片机,还有CAN芯片,一拆真简陋.如果大家担心的话,可以去淘宝找这货,如果不担心,自己随便找找呗.首先这货需要先设置波特率,然后什么都不过滤,如序号1,序号2:

QQ截图20150913184249

而STM32的CAN配置没什么难度的,最大的难度,应该就是波特率设置了.其中波特率公式如下:

波特率:48M (kHz) /((TBS1 + TBS2 + 3)*BRP)

比如说要得到500kbps,首先已知APB1=84MHz,也就是48000kHz,84000/x,其中x有一个组合是16*6,所以我们CAN波特率可是:

  CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
  CAN_InitStructure.CAN_BS1 = CAN_BS1_7tq;
  CAN_InitStructure.CAN_BS2 = CAN_BS2_6tq;
  CAN_InitStructure.CAN_Prescaler = 6;
  CAN_Init(CAN1, &CAN_InitStructure);

的其他并没特别大的问题,如果熟悉CAN的结构...如果不熟悉CAN结构,那就需要先学习CAN了.首先发送报文,长这个样子:

void Can1WriteData(uint16_t ID)
{
  CanTxMsg TxMessage;
  /* transmit */
  TxMessage.StdId = ID;
//TxMessage.ExtId = 0x00;
  TxMessage.RTR = CAN_RTR_DATA;
  TxMessage.IDE = CAN_ID_STD;
  TxMessage.DLC = 8;
  TxMessage.Data[0] = CAN1_DATA0;
  TxMessage.Data[1] = CAN1_DATA1;
  TxMessage.Data[2] = CAN1_DATA2;
  TxMessage.Data[3] = CAN1_DATA3;
  TxMessage.Data[4] = CAN1_DATA4;
  TxMessage.Data[5] = CAN1_DATA5;
  TxMessage.Data[6] = CAN1_DATA6;
  TxMessage.Data[7] = CAN1_DATA7;
  CAN_Transmit(CAN1,&TxMessage);
}

就是声明是什么帧,长度多少,然后发送,就可以了,非常简单.接受也差不多.程序示例图,接收在中断内处理:

QQ截图20150913191220 QQ截图20150913191226

 

程序下载:CAN收发实验

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注