|
本帖最后由 benjamin_0624 于 2021-2-2 11:19 编辑
电路,采用的是TJA1050,见电路原理图;控制用的是STM32F407 CAN1,PD0(RX),PD1(TX),
程序代码简单帖上一些:
初始化代码如下:
- GPIO_InitTypeDef GPIO_InitStructure;
- CAN_InitTypeDef CAN_InitStructure;
- CAN_FilterInitTypeDef CAN_FilterInitStructure;
- /* CAN GPIOs configuration **************************************************/
- /* Enable GPIO clock */
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
- /* Configure CAN RX and TX pins */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- GPIO_PinAFConfig(GPIOD, GPIO_PinSource0 | GPIO_PinSource1, GPIO_AF_CAN1);
- /* CAN configuration ********************************************************/
- /* Enable CAN clock */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
- /* CAN register init */
- CAN_DeInit(CAN1);
-
- /* 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; //normal:CAN_Mode_Normal loop:CAN_Mode_LoopBack
- CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
- CAN_InitStructure.CAN_BS1 = CAN_BS1_15tq;//12
- CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;//8
- CAN_InitStructure.CAN_Prescaler = 4;
- CAN_Init(CAN1, &CAN_InitStructure);
- //过滤器设置
- CAN_FilterInitStructure.CAN_FilterNumber = 0; //CAN1滤波器号从0到13,设置过滤器组为0
- CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; //滤波屏蔽模式
- CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; //设置过滤器组0位宽为32位
- CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; //0x0000;不过滤任何ID;; 0x12为slave id
- CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; //0x0000;不设置任何掩码;; 0x12为slave id
- CAN_FilterInitStructure.CAN_FilterMaskIdHigh =0x0000; //0x0000:不屏蔽任何ID ;; 0xFFFF; 完全按过滤器过滤
- CAN_FilterInitStructure.CAN_FilterMaskIdLow =0x0000; //0x0000:不屏蔽任何ID ;; 0xFFFF; 完全按过滤器过滤
-
- CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; // /*!< Specifies the FIFO (0 or 1) which will be assigned to the filter.
- //This parameter can be a value of @ref CAN_filter_FIFO */
- CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
- CAN_FilterInit(&CAN_FilterInitStructure);
- /* Enable FIFO 0 message pending Interrupt */
- CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
复制代码
中断初始化代码如下:
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* Enable CANx RX0 interrupt IRQ channel */
-
- NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
复制代码
现象:
两块板用上面的程序,进行CAN通信,调试、中断、收发等,都是正常的;
但任何一块板,接入CAN分析仪(我用的是广成科技USBCAN-I PRO V502),分析仪都识别不了波特率;按上面的程序,波特率设置的是500K;
我想用RIGOL DS1062C 示波器捕捉TJA1050输出端的信号,确定波特率。我的做法:我测总线电阻为60欧;之后接入示波器,用CH1的探头接CAN H, 用CH2的探头上的接地端接入CAN L, 采用电压档,交流耦合,示波器上没有信号。(即使我把示波器接入通信正常的CAN总线上,也没有信号)
问题:
1)为什么分析仪检测识别不到500K波特率呢? (可以排除分析仪问题,分析仪接入其它开发板,正常)
2)普通示波器测试CAN信号,做法上有什么问题?
请大侠们拆招,谢谢~ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|