搜索
bottom↓
回复: 21

stm32 CAN通信正常 CAN分析仪无法识别波特率问题

[复制链接]

出10入0汤圆

发表于 2021-2-2 10:58:34 | 显示全部楼层 |阅读模式
本帖最后由 benjamin_0624 于 2021-2-2 11:19 编辑

电路,采用的是TJA1050,见电路原理图;控制用的是STM32F407 CAN1,PD0(RX),PD1(TX),


程序代码简单帖上一些:

初始化代码如下:
  1. GPIO_InitTypeDef  GPIO_InitStructure;
  2.         CAN_InitTypeDef        CAN_InitStructure;
  3.         CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  4.         /* CAN GPIOs configuration **************************************************/

  5.         /* Enable GPIO clock */
  6.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

  7.         /* Configure CAN RX and TX pins */
  8.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
  9.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  10.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  11.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  12.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  13.         GPIO_Init(GPIOD, &GPIO_InitStructure);

  14.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  15.         GPIO_Init(GPIOD, &GPIO_InitStructure);

  16.         GPIO_PinAFConfig(GPIOD, GPIO_PinSource0 | GPIO_PinSource1, GPIO_AF_CAN1);

  17.         /* CAN configuration ********************************************************/  
  18.         /* Enable CAN clock */
  19.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

  20.         /* CAN register init */
  21.         CAN_DeInit(CAN1);
  22.        
  23.         /* CAN cell init */
  24.         CAN_InitStructure.CAN_TTCM = DISABLE;
  25.         CAN_InitStructure.CAN_ABOM = DISABLE;
  26.         CAN_InitStructure.CAN_AWUM = DISABLE;
  27.         CAN_InitStructure.CAN_NART = DISABLE;
  28.         CAN_InitStructure.CAN_RFLM = DISABLE;
  29.         CAN_InitStructure.CAN_TXFP = DISABLE;
  30.         CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; //normal:CAN_Mode_Normal    loop:CAN_Mode_LoopBack

  31.         CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
  32.         CAN_InitStructure.CAN_BS1 = CAN_BS1_15tq;//12
  33.         CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;//8
  34.         CAN_InitStructure.CAN_Prescaler = 4;
  35.         CAN_Init(CAN1, &CAN_InitStructure);

  36. //过滤器设置
  37.         CAN_FilterInitStructure.CAN_FilterNumber = 0;           //CAN1滤波器号从0到13,设置过滤器组为0
  38.         CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;           //滤波屏蔽模式
  39.         CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;        //设置过滤器组0位宽为32位

  40. CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;                        //0x0000;不过滤任何ID;; 0x12为slave id
  41.         CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;                                //0x0000;不设置任何掩码;; 0x12为slave id
  42.         CAN_FilterInitStructure.CAN_FilterMaskIdHigh =0x0000;        //0x0000:不屏蔽任何ID ;; 0xFFFF; 完全按过滤器过滤
  43.         CAN_FilterInitStructure.CAN_FilterMaskIdLow =0x0000;                //0x0000:不屏蔽任何ID ;; 0xFFFF; 完全按过滤器过滤
  44.        
  45.         CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;          // /*!< Specifies the FIFO (0 or 1) which will be assigned to the filter.
  46.                                                                                                           //This parameter can be a value of @ref CAN_filter_FIFO */
  47.         CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  48.         CAN_FilterInit(&CAN_FilterInitStructure);

  49.         /* Enable FIFO 0 message pending Interrupt */
  50.         CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
复制代码



中断初始化代码如下:
  1. NVIC_InitTypeDef NVIC_InitStructure;
  2.        
  3.         /* Enable CANx RX0 interrupt IRQ channel */
  4.        
  5.         NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
  6.        
  7.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  8.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  9.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  10.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  11.         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来反美的!

出0入168汤圆

发表于 2021-2-2 11:22:44 | 显示全部楼层
可以这样接:示波器CH1探头夹子接GND,探针接CAN_TX或者CAN_RX上。

出10入0汤圆

 楼主| 发表于 2021-2-2 11:37:51 | 显示全部楼层
eiglxl 发表于 2021-2-2 11:22
可以这样接:示波器CH1探头夹子接GND,探针接CAN_TX或者CAN_RX上。

谢谢。你这样,是接到TTL电平一侧了,我等会试试看。 有老师建议我,在通信状态下, CH1探针接CAN H,CH1夹子接GND(电路板GND),来测试波特率,下午继续。

出10入0汤圆

 楼主| 发表于 2021-2-2 14:22:24 | 显示全部楼层
本帖最后由 benjamin_0624 于 2021-2-2 14:37 编辑

将CH1探针接CANH,CH1夹子接板上GND(也是TJA1050地),示波器上稳定2.32V,直流电平;
将CH1探针接CANL,CH1夹子接板上GND,示波器上也是稳定2.32V,直流电平;
说明上述CANH CANL 均处于静电平,差分结果为0V,输出逻辑应该恒1;

但我所测试的CAN总线上,我的板子与CAN分析仪是正常工作处于通信状态的。 至少高、低端口电压应该是变化,不可能是恒定电平。这是为什么?


然后,
将CH1探针接TX,CH1夹子接板上GND,示波器上3.36V,稳定电平;
将CH1探针接RX,CH1夹子接板上GND,示波器上4.56V、4.52V跳变。

以上,我是针对 正常与CAN分析仪通信的 开发板进行测试的。 与我自己设计的板子不相关, 只是验证示波器测试CAN波特率这个方法有没有问题。 如果没有问题,我会转到自己的板上来测试其波特率。



下图为示波器测试过程中, CAN分析仪与开发板收发数据的截图。 这个过程中, 上述测到的电平没有什么变化,不太理解。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2021-2-2 19:45:51 | 显示全部楼层
你看一下你用的CAN调试工具里面有没有波特率自动识别功能,看代码是对的

出10入0汤圆

 楼主| 发表于 2021-2-2 21:51:54 | 显示全部楼层
596142041 发表于 2021-2-2 19:45
你看一下你用的CAN调试工具里面有没有波特率自动识别功能,看代码是对的

谢谢回答,在ECANTOOLS软件界,有自动识别,也有自定义识别功能。
自动识别范围从1M到几K。识别过程中,会看到800K,500K,250K等十几个常用波特率被扫描,结果都标识为无法识别。在这个识别的过程中,我一直在给CAN分析仪1s间隔定时发数据。
自定义识别,会有更小的范围,我也试过几次,就是没有识别到,有中彩票的感觉,可一次都没有中。

出0入147汤圆

发表于 2021-2-2 22:52:57 来自手机 | 显示全部楼层
先把示波器用明白了

出0入0汤圆

发表于 2021-2-2 23:03:34 | 显示全部楼层
CAN分析仪的并入电阻去掉

出0入0汤圆

发表于 2021-2-3 10:23:50 | 显示全部楼层
数据发送太少了,

出0入168汤圆

发表于 2021-2-3 12:50:26 | 显示全部楼层
benjamin_0624 发表于 2021-2-2 14:22
将CH1探针接CANH,CH1夹子接板上GND(也是TJA1050地),示波器上稳定2.32V,直流电平;
将CH1探针接CANL,C ...

CAN分析仪都能收到数据了,怎么还要自动识别波特率?
能收到数据说明CAN分析仪的波特率设置的是正确的,否则收不到数据的,这不是骑驴找驴吗?

出0入168汤圆

发表于 2021-2-3 12:55:35 | 显示全部楼层
用示波器捕捉不到信号,说明示波器没调对,把示波器调好后,CAN发送改为循环50ms发送一帧数据再试试。

出10入0汤圆

 楼主| 发表于 2021-2-3 15:52:33 | 显示全部楼层
eiglxl 发表于 2021-2-3 12:50
CAN分析仪都能收到数据了,怎么还要自动识别波特率?
能收到数据说明CAN分析仪的波特率设置的是正确的, ...

呵呵,谢谢回复。

我的问题可能描述有点多。

我有两类板,

一类是开发板, 与CAN分析仪正常通信,可以被CAN分析仪识别到500K。
一类是我自己的板子,CAN分析仪不能识别波特率,不能通信。但这种类型的板子,相互间可以正常CAN通信。 通信程序就是帖子中的那段代码,500K设置,电路就是帖子中的那张电路图。

因为我直接拿示波器测试我自己的板子,测不出信号。 所以,我先测试正常通信的开发板,先把测试方式和工具确定无误后,再来针对我的板子进行波特率测试。

我的目标,就是要看看我自己的板,波特率倒底是多少(按程序是500K),再开始下步问题。

出0入24汤圆

发表于 2021-2-3 18:34:07 来自手机 | 显示全部楼层
你的板子终端电阻接了吗

出0入0汤圆

发表于 2021-2-4 00:01:42 | 显示全部楼层
benjamin_0624 发表于 2021-2-3 15:52
呵呵,谢谢回复。

我的问题可能描述有点多。

开发板和你自己的板子能通信么?有没有逻辑分析仪,用逻辑分析仪看看CAN的TX端口是啥样的

出10入0汤圆

 楼主| 发表于 2021-2-4 22:23:51 | 显示全部楼层
596142041 发表于 2021-2-4 00:01
开发板和你自己的板子能通信么?有没有逻辑分析仪,用逻辑分析仪看看CAN的TX端口是啥样的 ...

谢谢 。我没有逻辑分析仪。 目前开发板与自己的板,不能通信,我接下来尝试解决。

出10入0汤圆

 楼主| 发表于 2021-2-4 22:24:55 | 显示全部楼层
20061002838 发表于 2021-2-3 18:34
你的板子终端电阻接了吗

谢谢,:)
板子终端电阻接了的。 如上面已经描述,我已经测量总线电阻60欧。

出10入0汤圆

 楼主| 发表于 2021-2-4 22:41:33 | 显示全部楼层
经过测试,已经将开发板的一路CAN信号,通过普通示波器捕获。方式:CH1探针接CANH,CAH1夹子接板子地;设置触发源(CH1),触发方式(普通),触发电压(3V——当CAH H变化时,会产生2.5V(静)以上的时序方波)。这样可捕获信号;如未设置触发时,得到信号就像之前的描述。
现在查看波形,测量得到波特率,见下图,看到的波特率是500K, 这也与CAN分析仪所识别到的波特率一致。

接下来,根据这个检测方法,来测试自己板子输出,并参考大家的建议继续解决问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2021-2-17 10:53:58 | 显示全部楼层
benjamin_0624 发表于 2021-2-4 22:41
经过测试,已经将开发板的一路CAN信号,通过普通示波器捕获。方式:CH1探针接CANH,CAH1夹子接板子地;设置 ...

使用的是什么CAN驱动芯片,是不是驱动芯片外围电路有问题

出40入0汤圆

发表于 2021-2-17 15:16:46 | 显示全部楼层
很可能是波特率不对,看配置,时钟给的对不对,can配置的波特率可能不对的

出10入0汤圆

 楼主| 发表于 2021-3-8 14:33:54 | 显示全部楼层
tdatd 发表于 2021-2-17 15:16
很可能是波特率不对,看配置,时钟给的对不对,can配置的波特率可能不对的 ...

谢谢,我出差出来后会继续。

出10入0汤圆

 楼主| 发表于 2021-3-8 14:35:32 | 显示全部楼层
wqm521216 发表于 2021-2-17 10:53
使用的是什么CAN驱动芯片,是不是驱动芯片外围电路有问题

用TJA1050这一款芯片,电路与开发板一致。(也没有复杂电路)。

出10入0汤圆

 楼主| 发表于 2021-5-29 20:27:53 | 显示全部楼层
有时间回复了,经过测试,原电路设计没有问题,调整程序后,已经完成同类型收发器(ATA6535 CAN、TJA1050CAN、SN65HVD230DR CAN,最后一个3.3)电路的测试,波特率匹配及收发,均成功。

这段时间忙于项目,如果大家有疑问,过段时间再回复大家。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 16:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表