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

STM32mp1 MCU开发求助

[复制链接]
守望者910 提问时间:2020-5-19 14:33 /
问题:最近用stm32mp1 MCU CAN开发,但是配置好代码后,发现can发送有问题,定义有三组buf数据,can发送 始终只能发送一组,换别的组数据始终不发送。下面是三组定义的数据;can始终只能发送TxData0
uint8_t TxData1[] = {0x10, 0x32, 0x54, 0x76, 0x98, 0x00, 0x11, 0x22};
uint8_t TxData3[] = {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x66};
uint8_t TxData0[] = {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x22, 0x56};
can代码配置
1.can初始化配置,其中设置can频率为20M/(seg1+seg2+1)=500k
  1. hfdcan1.Instance = FDCAN1;
  2.   hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
  3.   hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;//FDCAN_MODE_EXTERNAL_LOOPBACK;
  4.   hfdcan1.Init.AutoRetransmission = DISABLE;
  5.   hfdcan1.Init.TransmitPause = DISABLE;
  6.   hfdcan1.Init.ProtocolException = DISABLE;
  7.   hfdcan1.Init.NominalPrescaler = 1;
  8.   hfdcan1.Init.NominalSyncJumpWidth = 1;
  9.   hfdcan1.Init.NominalTimeSeg1 = 35;
  10.   hfdcan1.Init.NominalTimeSeg2 = 12;
  11.   hfdcan1.Init.DataPrescaler = 1;
  12.   hfdcan1.Init.DataSyncJumpWidth = 1;
  13.   hfdcan1.Init.DataTimeSeg1 = 1;
  14.   hfdcan1.Init.DataTimeSeg2 = 1;
  15.   hfdcan1.Init.MessageRAMOffset = 0;
  16.   hfdcan1.Init.StdFiltersNbr = 1;
  17.   hfdcan1.Init.ExtFiltersNbr = 0;
  18.   hfdcan1.Init.RxFifo0ElmtsNbr = 1;
  19.   hfdcan1.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8;
  20.   hfdcan1.Init.RxFifo1ElmtsNbr = 1;
  21.   hfdcan1.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_8;
  22.   hfdcan1.Init.RxBuffersNbr = 8;
  23.   hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_8;
  24.   hfdcan1.Init.TxEventsNbr = 0;
  25.   hfdcan1.Init.TxBuffersNbr = 8;
  26.   hfdcan1.Init.TxFifoQueueElmtsNbr =8;
  27.   hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
  28.   hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_8;
  29.   if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
  30.   {
  31.     Error_Handler();
  32.   }
复制代码
2.can滤波器设置和发送数据设置
  1. /* USER CODE BEGIN 2 */
  2.   /*##-1 Configure the FDCAN filters ########################################*/
  3.    /* Configure standard ID reception filter to Rx FIFO 0 */
  4.    sFilterConfig.IdType = FDCAN_STANDARD_ID;
  5.    sFilterConfig.FilterIndex = 0;
  6.    sFilterConfig.FilterType = FDCAN_FILTER_MASK;
  7.    sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
  8.    sFilterConfig.FilterID1 = 0x444;
  9.    sFilterConfig.FilterID2 = 0x555;
  10.    if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)
  11.    {
  12.      Error_Handler();
  13.    }
  14.    if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
  15.     {
  16.       Error_Handler();
  17.     }

  18.   /* USER CODE END 2 */
  19.    /*##-3 Transmit messages ##################################################*/
  20.      /* Add message to Tx FIFO */
  21.      TxHeader.Identifier = 0x444;
  22.      TxHeader.IdType = FDCAN_STANDARD_ID;
  23.      TxHeader.TxFrameType = FDCAN_DATA_FRAME;
  24.      TxHeader.DataLength = FDCAN_DLC_BYTES_8;
  25.      TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
  26.      TxHeader.BitRateSwitch = FDCAN_BRS_OFF;
  27.      TxHeader.FDFormat = FDCAN_CLASSIC_CAN;
  28.      TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
  29.      TxHeader.MessageMarker = 0;
  30.      if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, TxData0) != HAL_OK)
  31.      {
  32.        Error_Handler();
  33.      }
复制代码
3.发现HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, TxData0)这个函数第三个参数为TxData0就可以发送,如果换上TxData1或者其他始终发送不了,请各位大神看看这是什么原因?
收藏 评论7 发布时间:2020-5-19 14:33

举报

7个回答
MrJiu 回答时间:2020-5-19 18:13:33
没搞过啊!!!还在研究核心和外设的关系。。。怎么设计核心的使用!!!能不能说一下你的理解呢!!!
mylovemcu 回答时间:2020-5-19 18:48:59
检查一下程序吧  没遇到这种问题  这也太奇怪了  发送和数组名有什么关系 。。。
守望者910 回答时间:2020-5-19 21:27:16
mylovemcu 发表于 2020-5-19 18:48
检查一下程序吧  没遇到这种问题  这也太奇怪了  发送和数组名有什么关系 。。。 ...

代码也没别的东西呀,上面贴出来的是全部的can代码,看过几次了,不知道问题出在那里,但是我把TxData0里面的数据改一下也不能发送,不改不换都可以发送,真心不知道问题出在哪?
守望者910 回答时间:2020-5-19 21:29:43
mylovemcu 发表于 2020-5-19 18:48
检查一下程序吧  没遇到这种问题  这也太奇怪了  发送和数组名有什么关系 。。。 ...

应该不是数组名的问题,是里面的数据如不变把数组名改一下,比如TxData5都是可以发送的,关键是里面的数据不能改,改2个可以,改三个就发送不了了
守望者910 回答时间:2020-5-19 21:31:11
MrJiu 发表于 2020-5-19 18:13
没搞过啊!!!还在研究核心和外设的关系。。。怎么设计核心的使用!!!能不能说一下你的理解呢!!! ...

核心和外设都是一样的呀,cubemx配置分配就行了呀
butterflyspring 回答时间:2020-5-27 11:22:55
官方有个例程,可以参考一下看看是不是配置问题
\STM32Cube_FW_MP1_V1.2.0\Projects\STM32MP157C-DK2\Examples\FDCAN\FDCAN_Loopback\STM32CubeIDE

STM32CubeMP1 package v1.2.0可以在下面链接下载:
http://st.com/content/ccc/resour ... 2cubemp1_v1-2-0.zip

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

any012 回答时间:2020-6-2 14:10:40
这个不是更适合跑linux吗?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版