初级会员

- 积分
- 135
- 金钱
- 135
- 注册时间
- 2016-2-26
- 在线时间
- 41 小时
|
1金钱
是这样的:
cpu : stm32f207
CAN TX: PD1
CAN RX: PD0
用can总线与一个泵通讯
波特率为250
设备给泵发出ID18ffdf00,数据为00 00 00 00 08 02 28 20
泵接收到这个ID和数据后,反馈回的ID18ffde3d,数据为00 00 00 00 02 00 00 c6
现在发送了,么有反应
源代码如下:
void CANDevice::ModuleInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
/* CAN register init */
CAN_DeInit(CAN1);
CAN_InitTypeDef CAN_InitStructure;
CAN_StructInit(&CAN_InitStructure);
/*外设时钟设置*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD ,ENABLE);
// RCC_APB1PeriphClockCmd( RCC_APB1Periph_GPIOB, ENABLE);//使能PORTB时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用推挽
GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化IO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//上拉输入
GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化IO
/* CAN cell init */
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = DISABLE;
// CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack;
CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
/* Baudrate = 500 Kbps */ //250
CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;
CAN_InitStructure.CAN_Prescaler = 8;//4
CAN_Init(CAN1, &CAN_InitStructure);
CAN_FilterInitTypeDef CAN_FilterInitStructure;
CAN_FilterInitStructure.CAN_FilterNumber = 1;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
/* CAN FIFO0 message pending interrupt enable */
CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
}
/***************************************************************************
* Function: void SendOneFrameData(INT32U ulID, const INT8U* pBuff, INT8U ucLenght)
* Description: CAN发送一帧数据
* Input: INT32U ulID: ID地址
* const INT8U* pBuff: 数据
* INT8U ucLenght: 数据的长度
* Output:
* Others:
***************************************************************************/
void CANDevice::SendOneFrameData(INT32U ulID, const INT8U* pBuff, INT8U ucLenght)
{
u16 send_i=0,i;
if ( ucLenght > CAN_FARAM_SIZE ) return;
CanTxMsg* pMeg = (CanTxMsg*)AllocGeneralBuff(sizeof(CanTxMsg));
pMeg->StdId = ulID;
pMeg->ExtId = 0;
pMeg->IDE = CAN_ID_STD;
pMeg->RTR = CAN_RTR_DATA;
pMeg->DLC = ucLenght;
for(send_i=0;send_i<ucLenght;send_i++)
{pMeg->Data[send_i]=pBuff[send_i];}
memcpy(pMeg->Data, pBuff, ucLenght);
CAN_Transmit(CAN1, pMeg);
}
|
|