你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F767 CAN BAUD RATE QUESTION

[复制链接]
jxchen 提问时间:2022-7-6 12:42 / 未解决

使用can1原来使用baud rate:1Mbit,通讯正常

改为:250k ,就无法正常收发数据,请各位帮忙看看问题点所在

#if 0
      Can1_Handle.Instance = CAN1;
      Can1_Handle.Init.Prescaler = 6;
      Can1_Handle.Init.Mode = CAN_MODE_NORMAL;
      Can1_Handle.Init.SyncJumpWidth = CAN_SJW_1TQ;
      Can1_Handle.Init.TimeSeg1 = CAN_BS1_5TQ;
      Can1_Handle.Init.TimeSeg2 = CAN_BS2_3TQ;
      Can1_Handle.Init.TimeTriggeredMode = DISABLE;
      Can1_Handle.Init.AutoBusOff = ENABLE;
      Can1_Handle.Init.AutoWakeUp = ENABLE;
      Can1_Handle.Init.AutoRetransmission = DISABLE;
      Can1_Handle.Init.ReceiveFifoLocked = DISABLE;
      Can1_Handle.Init.TransmitFifoPriority = DISABLE;
      if (HAL_CAN_Init(&Can1_Handle) != HAL_OK)
      {
        Error_Handler();
      }
  #endif  
  //250kbps --> CAN_BS1_7TQ ,CAN_BS2_1TQ  ,Prescaler =24
      #if 1
      Can1_Handle.Instance = CAN1;
      Can1_Handle.Init.Prescaler = 24;
      Can1_Handle.Init.Mode = CAN_MODE_NORMAL;
      Can1_Handle.Init.SyncJumpWidth = CAN_SJW_1TQ;
      Can1_Handle.Init.TimeSeg1 = CAN_BS1_7TQ;
      Can1_Handle.Init.TimeSeg2 = CAN_BS2_1TQ;
      Can1_Handle.Init.TimeTriggeredMode = DISABLE;
      Can1_Handle.Init.AutoBusOff = ENABLE;
      Can1_Handle.Init.AutoWakeUp = ENABLE;
      Can1_Handle.Init.AutoRetransmission = DISABLE;
      Can1_Handle.Init.ReceiveFifoLocked = DISABLE;
      Can1_Handle.Init.TransmitFifoPriority = DISABLE;
      if (HAL_CAN_Init(&Can1_Handle) != HAL_OK)
      {
        Error_Handler();
      }
   #endif





收藏 评论6 发布时间:2022-7-6 12:42

举报

6个回答
leekuip 回答时间:2022-7-6 19:16:19
找一个工具,算一下这三个参数的配置,或者找一下主频相同的例程的配置,只修改分频参数,可能时钟有偏差。
      Can1_Handle.Init.SyncJumpWidth = CAN_SJW_1TQ;
      Can1_Handle.Init.TimeSeg1 = CAN_BS1_5TQ;
      Can1_Handle.Init.TimeSeg2 = CAN_BS2_3TQ;
butterflyspring 回答时间:2022-7-7 11:03:37
通常都会用LOOP BACK 模式先测试一下能否发送出
butterflyspring 回答时间:2022-7-7 11:03:40
通常都会用LOOP BACK 模式先测试一下能否发送出
jxchen 回答时间:2022-7-7 12:25:48

找到计算baudrate software 如下:

STM32 CAN波特率设置_河西剑客的博客-CSDN博客_stm32can波特率设置
use hsi mode
     Can1_Handle.Instance = CAN1;
      Can1_Handle.Init.Prescaler =31;
      Can1_Handle.Init.Mode = CAN_MODE_NORMAL;
      Can1_Handle.Init.SyncJumpWidth = CAN_SJW_1TQ;
      Can1_Handle.Init.TimeSeg1 = CAN_BS1_5TQ;
      Can1_Handle.Init.TimeSeg2 = CAN_BS2_1TQ;
      Can1_Handle.Init.TimeTriggeredMode = DISABLE;
      Can1_Handle.Init.AutoBusOff = ENABLE;
      Can1_Handle.Init.AutoWakeUp = ENABLE;
      Can1_Handle.Init.AutoRetransmission = DISABLE;
      Can1_Handle.Init.ReceiveFifoLocked = DISABLE;
      Can1_Handle.Init.TransmitFifoPriority = DISABLE;
      if (HAL_CAN_Init(&Can1_Handle) != HAL_OK)
      {
        Error_Handler();
      }
我有两片evbboard,这样可以通讯,但跑没几次就停掉了

如果设定成1Mbit ,就没问题


leekuip 回答时间:2022-7-7 16:32:59
jxchen 发表于 2022-7-7 12:25
找到计算baudrate software 如下:
STM32 CAN波特率设置_河西剑客的博客-CSDN博客_stm32can波特率设置
use  ...

应该还是频率不对,计算的时候是用的你实际的频率算的吗?
jxchen 回答时间:2022-7-7 18:40:41
leekuip 发表于 2022-7-7 16:32
应该还是频率不对,计算的时候是用的你实际的频率算的吗?

初步排除方法,打开中断错误中断
并将中断内检查旗号与清除
          if(CAN_GetITStatus(CANx, CAN_IT_ERR ) == SET )
    {
        CAN_ClearITPendingBit( CANx, CAN_IT_ERR );
    }

已经跑了半小时,不会停掉

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版