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