软件环境 IAR4.42+JLINK 板子是自己参照万利的做得,用的是2.0的固件库
仿真提示是 主机发送错误 不知是什么原因,各位老大帮忙看看
主机程序主程序 int main(void) { CanTxMsg TxMessage; u32 i = 0; u8 TransmitMailbox; u8 flag=1,Txflag=0; RCC_Configuration(); NVIC_Configuration(); GPIO_Configuration(); GPIO_SetBits(GPIOA, GPIO_Pin_3); do { TestRx = CAN_Polling(); } while (TestRx == 0); if(flag == 1) { TxMessage.StdId=0x11; TxMessage.RTR=CAN_RTR_REMOTE; TxMessage.IDE=CAN_ID_STD; TxMessage.DLC=2; TransmitMailbox=CAN_Transmit(&TxMessage); i = 0; while((CAN_TransmitStatus(TransmitMailbox) != CANTXOK) && (i != 0xFF)) { i++; } if(i == 0xFF) Txflag = 1; else Txflag = 0; } if(Txflag == 1) GPIO_SetBits(GPIOA, GPIO_Pin_3); else GPIO_ResetBits(GPIOA, GPIO_Pin_3); while (1) { } }
从机程序主程序 int main(void) { u32 i = 0; u8 TransmitMailbox; CanTxMsg TxMessage; /* System Clocks Configuration */ RCC_Configuration(); /* NVIC Configuration */ NVIC_Configuration(); /* GPIO ports pins Configuration */ GPIO_Configuration(); GPIO_SetBits(GPIOA, GPIO_Pin_3); do { TestRx = CAN_Polling(); } while (TestRx == 0); while (1) { if(RxMessage.RTR == CAN_RTR_REMOTE) { RxMessage.RTR = CAN_RTR_DATA; TxMessage.StdId = RxMessage.StdId; TxMessage.RTR = CAN_RTR_DATA; TxMessage.IDE = RxMessage.IDE; TxMessage.DLC = RxMessage.DLC; TxMessage.Data[0]=0xCA; TxMessage.Data[1]=0xFE; TxMessage.Data[2]=0xAA; TxMessage.Data[3]=0xAA; TxMessage.Data[4]=0xAA; TxMessage.Data[5]=0xAA; TxMessage.Data[6]=0xAA; TxMessage.Data[7]=0xAA; TransmitMailbox=CAN_Transmit(&TxMessage); i = 0; while((CAN_TransmitStatus(TransmitMailbox) != CANTXOK) && (i != 0xFF)) { i++; } }//if }//while }
CAN初始化函数为 TestStatus CAN_Polling(void) { u8 Error; CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; /* CAN register init */ CAN_DeInit(); CAN_StructInit(&CAN_InitStructure); /* 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_Normal; CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; CAN_InitStructure.CAN_Prescaler=5; Error = CAN_Init(&CAN_InitStructure); if (Error == 0) return FAILED; /* CAN filter init */ CAN_FilterInitStructure.CAN_FilterNumber=0; CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit; CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0; CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; CAN_FilterInit(&CAN_FilterInitStructure); CAN_ITConfig(CAN_IT_FMP0, ENABLE); return PASSED; }
|