OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2414|回复: 13

STM32H750VBT6 CAN通信发不出来数据,求救!!!

[复制链接]
回帖奖励 12 金钱 回复本帖可获得 2 金钱奖励! 每人限 1 次(中奖概率 80%)

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2017-7-2
在线时间
38 小时
发表于 2023-8-4 14:34:15 | 显示全部楼层 |阅读模式
STM32H750VBT6移植了北极星开发板的CAN通信程序,发不出来数据,大佬们帮忙分析下


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2017-7-2
在线时间
38 小时
 楼主| 发表于 2023-8-4 14:42:32 | 显示全部楼层
void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* hfdcan)
{
    GPIO_InitTypeDef GPIO_Initure;
    RCC_PeriphCLKInitTypeDef FDCAN_PeriphClk;
   
    __HAL_RCC_FDCAN_CLK_ENABLE();                   //ê1ÄüFDCAN1ê±Öó
    __HAL_RCC_GPIOB_CLK_ENABLE();                                //¿aÆôGPIOAê±Öó
       
    //FDCAN1ê±ÖóÔ′ÅäÖÃÎaPLL1Q
    FDCAN_PeriphClk.PeriphClockSelection=RCC_PERIPHCLK_FDCAN;
    FDCAN_PeriphClk.FdcanClockSelection=RCC_FDCANCLKSOURCE_PLL;
    HAL_RCCEx_PeriphCLKConfig(&FDCAN_PeriphClk);
   
    GPIO_Initure.Pin=GPIO_PIN_8|GPIO_PIN_9;       //PA11,12
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;              //íÆíì¸′óÃ
    GPIO_Initure.Pull=GPIO_PULLUP;                  //éÏà-
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_MEDIUM;      //3¬¸ßËù
    GPIO_Initure.Alternate=GPIO_AF9_FDCAN1;         //¸′óÃÎaCAN1
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);             //3õê¼»ˉ
   
#if FDCAN1_RX0_INT_ENABLE     
    HAL_NVIC_SetPriority(FDCAN1_IT0_IRQn,1,2);
    HAL_NVIC_EnableIRQ(FDCAN1_IT0_IRQn);
#endif       
}

u8 FDCAN1_Mode_Init(u16 presc,u8 ntsjw,u16 ntsg1,u8 ntsg2,u32 mode)
{
    FDCAN_FilterTypeDef FDCAN1_RXFilter;
        
    //3õê¼»ˉFDCAN1
    HAL_FDCAN_DeInit(&FDCAN1_Handler);                              //ÏèÇå3yòÔÇ°μÄéèÖÃ
    FDCAN1_Handler.Instance=FDCAN1;
    FDCAN1_Handler.Init.FrameFormat=FDCAN_FRAME_CLASSIC;            //′«í3Ä£ê½
    FDCAN1_Handler.Init.Mode=mode;                                  //»Ø»·2aêÔ
    FDCAN1_Handler.Init.AutoRetransmission=DISABLE;                 //1رÕ×Ô¶ˉÖØ′«£¡′«í3Ä£ê½ÏÂò»¶¨òa1رÕ£¡£¡£¡
    FDCAN1_Handler.Init.TransmitPause=DISABLE;                      //1رÕ′«êäÔYí£
    FDCAN1_Handler.Init.ProtocolException=DISABLE;                  //1رÕD-òéòì3£′|àí
    FDCAN1_Handler.Init.NominalPrescaler=presc;                     //·ÖÆμÏμêy
    FDCAN1_Handler.Init.NominalSyncJumpWidth=ntsjw;                 //ÖØDÂí¬2½ìøÔ¾¿í¶è
    FDCAN1_Handler.Init.NominalTimeSeg1=ntsg1;                      //tsg1·¶Î§:2~256
    FDCAN1_Handler.Init.NominalTimeSeg2=ntsg2;                      //tsg2·¶Î§:2~128
    FDCAN1_Handler.Init.MessageRAMOffset=0;                         //DÅÏ¢RAMÆ«òÆ
    FDCAN1_Handler.Init.StdFiltersNbr=0;                            //±ê×¼DÅÏ¢IDÂË2¨Æ÷±àoÅ
    FDCAN1_Handler.Init.ExtFiltersNbr=0;                            //à©Õ1DÅÏ¢IDÂË2¨Æ÷±àoÅ
    FDCAN1_Handler.Init.RxFifo0ElmtsNbr=1;                          //½óêÕFIFO0ÔaËرàoÅ
    FDCAN1_Handler.Init.RxFifo0ElmtSize=FDCAN_DATA_BYTES_8;         //½óêÕFIFO0ÔaËØ′óD¡£o8×Ö½ú
    FDCAN1_Handler.Init.RxBuffersNbr=0;                             //½óêÕ»o3å±àoÅ
    FDCAN1_Handler.Init.TxEventsNbr=0;                              //·¢Ëíê¼t±àoÅ
    FDCAN1_Handler.Init.TxBuffersNbr=0;                             //·¢Ëí»o3å±àoÅ
    FDCAN1_Handler.Init.TxFifoQueueElmtsNbr=1;                      //·¢ËíFIFODòáDÔaËرàoÅ
    FDCAN1_Handler.Init.TxFifoQueueMode=FDCAN_TX_FIFO_OPERATION;    //·¢ËíFIFODòáDÄ£ê½
    FDCAN1_Handler.Init.TxElmtSize=FDCAN_DATA_BYTES_8;              //·¢Ëí′óD¡:8×Ö½ú
    if(HAL_FDCAN_Init(&FDCAN1_Handler)!=HAL_OK) return 1;           //3õê¼»ˉFDCAN
  
    //ÅäÖÃRXÂË2¨Æ÷   
    FDCAN1_RXFilter.IdType=FDCAN_STANDARD_ID;                       //±ê×¼ID
    FDCAN1_RXFilter.FilterIndex=0;                                  //ÂË2¨Æ÷Ë÷òy                  
    FDCAN1_RXFilter.FilterType=FDCAN_FILTER_MASK;                   //ÂË2¨Æ÷ààDí
    FDCAN1_RXFilter.FilterConfig=FDCAN_FILTER_TO_RXFIFO0;           //1yÂËÆ÷01Øáaμ½FIFO0  
    FDCAN1_RXFilter.FilterID1=0x0000;                               //32λID
    FDCAN1_RXFilter.FilterID2=0x0000;                               //èç1ûFDCANÅäÖÃÎa′«í3Ä£ê½μÄ»°£¬ÕaàïêÇ32λÑúÂë
    if(HAL_FDCAN_ConfigFilter(&FDCAN1_Handler,&FDCAN1_RXFilter)!=HAL_OK) return 2;//ÂË2¨Æ÷3õê¼»ˉ
    HAL_FDCAN_Start(&FDCAN1_Handler);                               //¿aÆôFDCAN
    HAL_FDCAN_ActivateNotification(&FDCAN1_Handler,FDCAN_IT_RX_FIFO0_NEW_MESSAGE,0);
    return 0;
}

int main(void)
{  
    sys_cache_enable();                 /* ′ò¿aL1-Cache */
    HAL_Init();                         /* 3õê¼»ˉHAL¿a */
    sys_stm32_clock_init(240, 2, 2, 4); /* éèÖÃê±Öó, 480Mhz */
    delay_init(480);                    /* Ñóê±3õê¼»ˉ */
    usart_init(115200);                 /* ′®¿ú3õê¼»ˉÎa115200 */
    led_init();                         /* 3õê¼»ˉLED */
    FDCAN1_Mode_Init(10,8,31,8,FDCAN_MODE_NORMAL);
    while (1)
    {
                 FDCAN1_Send_Msg(canbuf,FDCAN_DLC_BYTES_8);
    }
}
回复 支持 反对

使用道具 举报

10

主题

216

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5853
金钱
5853
注册时间
2016-12-19
在线时间
749 小时
发表于 2023-8-8 11:09:58 | 显示全部楼层

回帖奖励 +2 金钱

用stm Gubmax直接生成的代码试试
回复 支持 反对

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2017-7-2
在线时间
38 小时
 楼主| 发表于 2023-8-8 13:16:14 | 显示全部楼层
你的蓝朋友 发表于 2023-8-8 11:09
用stm Gubmax直接生成的代码试试

int main(void)
{
  SCB_EnableICache();
  SCB_EnableDCache();
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_FDCAN1_Init();
  MX_FDCAN2_Init();
        HAL_FDCAN_MspInit(&hfdcan1);
FDCAN1_Config();
  while (1)
  {
                TxData[0]=1;
                TxData[1]=2;
                TxData[2]=3;
                TxData[3]=4;
                TxData[4]=5;
                TxData[5]=6;
                TxData[6]=7;
                TxData[7]=8;
                HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1,&TxHeader,TxData);
                HAL_Delay(1);
   
    HAL_Delay(500);
   
  }
  /* USER CODE END 3 */
}

试过了还是不行,可否加个联系方式帮我看一下代码呢?
回复 支持 反对

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2017-7-2
在线时间
38 小时
 楼主| 发表于 2023-8-11 12:01:52 | 显示全部楼层
顶顶顶
回复 支持 反对

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3502
金钱
3502
注册时间
2016-3-19
在线时间
846 小时
发表于 2023-8-11 12:59:44 | 显示全部楼层

回帖奖励 +2 金钱

没弄过 STM32H750VBT6   帮顶
Nothing is impossible
回复 支持 反对

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2017-7-2
在线时间
38 小时
 楼主| 发表于 2023-8-12 11:31:27 | 显示全部楼层
继续顶
回复 支持 反对

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2017-7-2
在线时间
38 小时
 楼主| 发表于 2023-8-14 16:27:51 | 显示全部楼层
我顶啊顶
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2018-12-17
在线时间
85 小时
发表于 2023-8-18 09:56:58 | 显示全部楼层

回帖奖励 +2 金钱

楼主问题解决了么,我也遇到同样的问题,帧型号ID都可以发送,就是数据长度为0,后面也没有数据.
回复 支持 反对

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2017-7-2
在线时间
38 小时
 楼主| 发表于 2023-8-25 16:38:14 | 显示全部楼层
zidaoziyan77 发表于 2023-8-18 09:56
楼主问题解决了么,我也遇到同样的问题,帧型号ID都可以发送,就是数据长度为0,后面也没有数据.

代码方便发我邮箱一份吗?我现在啥都发不出去,我可以基于你的代码咱们一起查一下原因,邮箱: 370360504@qq.com
回复 支持 反对

使用道具 举报

75

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2021-2-5
在线时间
135 小时
发表于 2023-8-25 16:47:01 | 显示全部楼层

回帖奖励 +2 金钱

你的CAN初始化过程判定了是否成功吗?另外你用回环模式测试一下是否能够初始化成功
回复 支持 反对

使用道具 举报

75

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2021-2-5
在线时间
135 小时
发表于 2023-8-25 16:49:43 | 显示全部楼层
CAN无法发送基本就是一个问题,CAN初始化有问题,发送不用像接收那样考虑过滤ID,中断是否有问题,前提是硬件没问题,你用正常模式如果不能初始化,CAN芯片有问题也会导致你初始化失败
回复 支持 反对

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2017-7-2
在线时间
38 小时
 楼主| 发表于 2023-8-26 17:05:12 | 显示全部楼层
15284083060 发表于 2023-8-25 16:49
CAN无法发送基本就是一个问题,CAN初始化有问题,发送不用像接收那样考虑过滤ID,中断是否有问题,前提是硬 ...

怎么看CAN有没有初始化成功呢?
回复 支持 反对

使用道具 举报

75

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2021-2-5
在线时间
135 小时
发表于 2023-8-26 18:12:22 | 显示全部楼层
guo6339419 发表于 2023-8-26 17:05
怎么看CAN有没有初始化成功呢?

你的初始化函数不是有返回值吗,通过返回值判断
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 06:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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