OpenEdv-开源电子网

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

两块stm32f103c8+两块tja1050为啥can分析仪没有数据?

[复制链接]

2

主题

7

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2021-11-14
在线时间
5 小时
发表于 2021-11-30 20:23:49 | 显示全部楼层 |阅读模式
6金钱
我之前用野火的代码试的回环测试是有数据的啊但是??为什么我吧tja1050拔掉这个串口调试助手也可以用??是因为这个板子自带can协议吗??但是我用这个代码can分析仪一直没有数据显示我本来以为是代码的问题然后我拿一块野火霸道的开发板试验了can分析仪是可以收到数据的,这我就整不会了,它这个我想可能我引脚接的不对但是我接的 gnd接gnd ,rx接pb8,tx接pb9,vcc接的5v,这也没错啊所以大哥们我这个是啥问题啊有人能指导一下吗, 1638274946(1).png 1638274905(1).png


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

使用道具 举报

2

主题

7

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2021-11-14
在线时间
5 小时
 楼主| 发表于 2021-11-30 20:24:52 | 显示全部楼层
这个是can的代码

#include "./can2/bsp_can2.h"



/*
* 函数名:CAN_GPIO_Config
* 描述  :CAN的GPIO 配置
* 输入  :无
* 输出  : 无
* 调用  :内部调用
*/
static void CAN_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;          

  /* Enable GPIO clock */
  RCC_APB2PeriphClockCmd(CAN_TX_GPIO_CLK|CAN_RX_GPIO_CLK, ENABLE);
        //重映射引脚
        GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);

         /* Configure CAN TX pins */
  GPIO_InitStructure.GPIO_Pin = CAN_TX_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                         // 复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(CAN_TX_GPIO_PORT, &GPIO_InitStructure);
       
        /* Configure CAN RX  pins */
  GPIO_InitStructure.GPIO_Pin = CAN_RX_PIN ;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                     // 上拉输入
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(CAN_RX_GPIO_PORT, &GPIO_InitStructure);
}

/*
* 函数名:CAN_NVIC_Config
* 描述  :CAN的NVIC 配置,第1优先级组,0,0优先级
* 输入  :无
* 输出  : 无
* 调用  :内部调用
*/
static void CAN_NVIC_Config(void)
{
           NVIC_InitTypeDef NVIC_InitStructure;
                /* Configure one bit for preemption priority */
                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
                 /*中断设置*/
                NVIC_InitStructure.NVIC_IRQChannel = CAN_RX_IRQ;           //CAN1 RX0中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;                   //抢占优先级0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                           //子优先级为0
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

/*
* 函数名:CAN_Mode_Config
* 描述  :CAN的模式 配置
* 输入  :无
* 输出  : 无
* 调用  :内部调用
*/
static void CAN_Mode_Config(void)
{
        CAN_InitTypeDef        CAN_InitStructure;
        /************************CAN通信参数设置**********************************/
        /* Enable CAN clock */
  RCC_APB1PeriphClockCmd(CAN_CLK, ENABLE);

        /*CAN寄存器初始化*/
        CAN_DeInit(CANx);
        CAN_StructInit(&CAN_InitStructure);

        /*CAN单元初始化*/
        CAN_InitStructure.CAN_TTCM=DISABLE;                           //MCR-TTCM  关闭时间触发通信模式使能
        CAN_InitStructure.CAN_ABOM=ENABLE;                           //MCR-ABOM  自动离线管理
        CAN_InitStructure.CAN_AWUM=ENABLE;                           //MCR-AWUM  使用自动唤醒模式
        CAN_InitStructure.CAN_NART=DISABLE;                           //MCR-NART  禁止报文自动重传          DISABLE-自动重传
        CAN_InitStructure.CAN_RFLM=DISABLE;                           //MCR-RFLM  接收FIFO 锁定模式  DISABLE-溢出时新报文会覆盖原有报文  
        CAN_InitStructure.CAN_TXFP=DISABLE;                           //MCR-TXFP  发送FIFO优先级 DISABLE-优先级取决于报文标示符
        CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack;  //正常工作模式
        CAN_InitStructure.CAN_SJW=CAN_SJW_2tq;                   //BTR-SJW 重新同步跳跃宽度 2个时间单元
         
        /* ss=1 bs1=5 bs2=3 位时间宽度为(1+5+3) 波特率即为时钟周期tq*(1+3+5)  */
        CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;                   //BTR-TS1 时间段1 占用了5个时间单元
        CAN_InitStructure.CAN_BS2=CAN_BS2_3tq;                   //BTR-TS1 时间段2 占用了3个时间单元       
       
        /* CAN Baudrate = 1 MBps (1MBps已为stm32的CAN最高速率) (CAN 时钟频率为 APB1 = 36 MHz) */
        CAN_InitStructure.CAN_Prescaler =4;                   ////BTR-BRP 波特率分频器  定义了时间单元的时间长度 36/(1+5+3)/4=1 Mbps
        CAN_Init(CANx, &CAN_InitStructure);
}

/*
* 函数名:CAN_Filter_Config
* 描述  :CAN的过滤器 配置
* 输入  :无
* 输出  : 无
* 调用  :内部调用
*/
static void CAN_Filter_Config(void)
{
        CAN_FilterInitTypeDef  CAN_FilterInitStructure;

        /*CAN筛选器初始化*/
        CAN_FilterInitStructure.CAN_FilterNumber=0;                                                //筛选器组0
        CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;        //工作在掩码模式
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;        //筛选器位宽为单个32位。
        /* 使能筛选器,按照标志的内容进行比对筛选,扩展ID不是如下的就抛弃掉,是的话,会存入FIFO0。 */

        CAN_FilterInitStructure.CAN_FilterIdHigh= ((((u32)0x1314<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF0000)>>16;                //要筛选的ID高位
        CAN_FilterInitStructure.CAN_FilterIdLow= (((u32)0x1314<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF; //要筛选的ID低位
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF;                        //筛选器高16位每位必须匹配
        CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0xFFFF;                        //0xFFFF筛选器低16位每位必须匹配
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0 ;                                //筛选器被关联到FIFO0
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;                        //使能筛选器
        CAN_FilterInit(&CAN_FilterInitStructure);
        /*CAN通信中断使能*/
        CAN_ITConfig(CANx, CAN_IT_FMP0, ENABLE);
}


/*
* 函数名:CAN_Config
* 描述  :完整配置CAN的功能
* 输入  :无
* 输出  : 无
* 调用  :外部调用
*/
void CAN_Config(void)
{
  CAN_GPIO_Config();
  CAN_NVIC_Config();
  CAN_Mode_Config();
  CAN_Filter_Config();   
}


/**
  * @brief  初始化 Rx Message数据结构体
  * @param  RxMessage: 指向要初始化的数据结构体
  * @retval None
  */
void Init_RxMes(CanRxMsg *RxMessage)
{
  uint8_t ubCounter = 0;

        /*把接收结构体清零*/
  RxMessage->StdId = 0x00;
  RxMessage->ExtId = 0x00;
  RxMessage->IDE = CAN_ID_STD;
  RxMessage->DLC = 0;
  RxMessage->FMI = 0;
  for (ubCounter = 0; ubCounter < 8; ubCounter++)
  {
    RxMessage->Data[ubCounter] = 0x00;
  }
}


/*
* 函数名:CAN_SetMsg
* 描述  :CAN通信报文内容设置,设置一个数据内容为0-7的数据包
* 输入  :发送报文结构体
* 输出  : 无
* 调用  :外部调用
*/         
void CAN_SetMsg(CanTxMsg *TxMessage)
{          
        uint8_t ubCounter = 0;

  //TxMessage.StdId=0x00;                                                 
  TxMessage->ExtId=0x1314;                                         //使用的扩展ID
  TxMessage->IDE=CAN_ID_EXT;                                         //扩展模式
  TxMessage->RTR=CAN_RTR_DATA;                                 //发送的是数据
  TxMessage->DLC=8;                                                         //数据长度为8字节
       
       
       
        /*设置要发送的数据0-7*/
        for (ubCounter = 0; ubCounter < 8; ubCounter++)
  {
    TxMessage->Data[ubCounter] = '8';
  }
}
/**************************END OF FILE************************************/











回复

使用道具 举报

2

主题

7

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2021-11-14
在线时间
5 小时
 楼主| 发表于 2021-11-30 20:25:45 | 显示全部楼层
或许会不会是因为我的波特率弄错了?
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2021-11-14
在线时间
5 小时
 楼主| 发表于 2021-11-30 20:30:19 | 显示全部楼层
dd5e56b4205de3c391a037c05cbf444.jpg 4caa06d8410e25e2d5a5f6ab908f34d.jpg 大佬九敏啊!学的软件毕设非让搞硬件我已经自闭了,这个是啥问题?附带我的接线图
回复

使用道具 举报

2

主题

369

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4241
金钱
4241
注册时间
2020-7-24
在线时间
714 小时
发表于 2021-12-1 10:14:18 | 显示全部楼层
发送数据,用示波器抓一下CAN总线上有没有波形数据
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2021-11-14
在线时间
5 小时
 楼主| 发表于 2021-12-1 15:37:22 | 显示全部楼层
GJJ1999 发表于 2021-12-1 10:14
发送数据,用示波器抓一下CAN总线上有没有波形数据

没有示波器啊...
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-14 16:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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