在线时间2208 小时
UID2073122
注册时间2016-1-12
NXP金币119
TA的每日心情 | 开心 2020-6-18 08:45 |
---|
签到天数: 812 天 连续签到: 1 天 [LV.10]以坛为家III
金牌会员
 
- 积分
- 6321
- 最后登录
- 2025-7-15
|
本帖最后由 原来的你 于 2018-3-27 11:11 编辑
最近产品中用到KE06Z 的can通信,目前can总线上面波形已经出现,但是CANPro收不到数据,而且总线一直有波形,不知道什么原因,使用的总线时钟,但是晶振使用的是19.6M,不知道是不是晶振问题- #define NODE_ID1 0x801
- #define NODE_ID2 0x802
- #define NODE_ID3 0x803
- //stand ID
- #define CAN_IDAR1 0
- #define CAN_IDMR1 0
- //extend ID
- #define CAN_IDAR0 ((NODE_ID2>>21)<<24)|(((NODE_ID2>>18)&0x7)<<21)\
- |(((NODE_ID2>>15)&0x7)<<16)|(((NODE_ID2>>7)&0xFF)<<8)\
- |(((NODE_ID2>>0)&0x7F)<<1)\
- |(1<<19) //extend ID
- #define CAN_IDMR0 (1<<20) /* received only extend frame from this ID */
复制代码- int main(void)
- {
- RTC_ConfigType sRTCConfig;
- RTC_ConfigType *pRTCConfig = &sRTCConfig;
-
- ADC_ConfigType sADC_Config = {0};
-
- MSCAN_ConfigType sMSCANConfig = {0};
- ItemInfoType sCANTxItemInfo;
- MSCAN_FrameType sRxFrameInfo;
-
- uint8_t i;
- volatile uint32_t u32Delay;
-
- sysinit();
- RUN_Init();
- YK0_Init();
- YK1_Init();
- YK2_Init();
-
- RUN_Off();
- YK0_Off();
- YK1_Off();
- YK2_Off();
- GPIOA->PDDR |= (1<<13); /* CAN芯片STB为低 PTB5*/
- GPIOA->PCOR = (1<<13);
- /* configure RTC to 1Hz interrupt frequency */
- pRTCConfig->u16ModuloValue = 9;
- pRTCConfig->bInterruptEn = RTC_INTERRUPT_ENABLE; /* enable interrupt */
- pRTCConfig->bClockSource = RTC_CLKSRC_1KHZ; /*clock source is 1khz*/
- pRTCConfig->bClockPresaler = RTC_CLK_PRESCALER_100; /*prescaler is 100*/
- RTC_SetCallback(RTC_CallBack);
- RTC_Init(pRTCConfig);
- /* initiaze ADC module */
- sADC_Config.u8ClockDiv = ADC_ADIV_DIVIDE_4;
- sADC_Config.u8ClockSource = CLOCK_SOURCE_BUS_CLOCK;
- sADC_Config.u8Mode = ADC_MODE_12BIT;
- sADC_Config.sSetting.bIntEn = 1;
- ADC_SetCallBack(ADC_CallBack);
- ADC_Init(ADC, &sADC_Config);
- /* initiaze MSCAN module */
- MSCAN_GlobeVaribleInit(MSCAN);
-
- SIM->PINSEL1 |= SIM_PINSEL1_MSCANPS_MASK;
-
- sMSCANConfig.sBaudRateSetting.SJW = BAUD_RATE_SJW;
- sMSCANConfig.sBaudRateSetting.BRP = BAUD_RATE_BRP;
- sMSCANConfig.sBaudRateSetting.SAMP = BAUD_RATE_SAMP;
- sMSCANConfig.sBaudRateSetting.TSEG1= BAUD_RATE_TSEG1;
- sMSCANConfig.sBaudRateSetting.TSEG2= BAUD_RATE_TSEG2;
- sMSCANConfig.u32IDAR0 = (CAN_IDAR0);
- sMSCANConfig.u32IDAR1 = (CAN_IDAR1);
- sMSCANConfig.u32IDMR0 = (CAN_IDMR0);
- sMSCANConfig.u32IDMR1 = (CAN_IDMR1);
- sMSCANConfig.u8IDARMode = ID_ACCEPT_MODE_TWO32;
- sMSCANConfig.sSetting.bCanEn = 1;
- sMSCANConfig.sSetting.bCLKSRC = 1;
- //sMSCANConfig.sSetting.bLoopModeEn = 1;
- sMSCANConfig.sSetting.bRxFullIEn=1;
- sMSCANConfig.sSetting.bTimerEn=1;
- sMSCANConfig.sSetting.bOverRunIEn=1;
- sMSCANConfig.sSetting.bStatusChangeIEn=1;
- //sMSCANConfig.sSetting.bTxEmptyIEn=1;
- CAN_Init(MSCAN,&sMSCANConfig);
- //Initialize the Tx information
- sCANTxItemInfo.bIsExtOrStand = 1;
- sCANTxItemInfo.bIsRemoteFrame = 0;
- sCANTxItemInfo.ID_Type.ID = NODE_ID1;
- sCANTxItemInfo.u32DataLength = 24;
- for(i=0;i<24;i++)
- {
- sCANTxItemInfo.u8DataBuff[i] = i;
- }
- sCANTxItemInfo.u8BPR = 0x80;
- CAN_SendItemToBuffer(MSCAN,&sCANTxItemInfo,&sCAN_TxBuff);
-
- while(1)
- {
- /* set channel to start a new conversion */
- u8ADC_ConversionFlag = 0;
- ADC_SetChannel(ADC,ADC_CHANNEL_AD4);
- /* wait conversion complete */
- while(!u8ADC_ConversionFlag);
- CAN_CheckSendBufferFrame(MSCAN,&sCAN_TxBuff);
- while(CAN_ReadOneFramefromBufferQueue(&sRxFrameInfo))
- {
- //printf("receive a frame data!\r\n");
- //printf("ID is 0x%x!\r\n",sRxFrameInfo.ID_Type);
- //printf("Data length is %d\r\n",sRxFrameInfo.DLR);
- for(i=0;i<sRxFrameInfo.DLR;i++)
- {
- //printf("0x%x,",sRxFrameInfo.DSR[i]);
- }
- //printf("\r\n");
- }
-
- for(u32Delay=0;u32Delay<0xFFFFF;u32Delay++);
- sCANTxItemInfo.u8DataBuff[7]++;
- CAN_SendItemToBuffer(MSCAN,&sCANTxItemInfo,&sCAN_TxBuff);
- }
- }
复制代码
|
|