打印
[STM32F1]

为什么我的can通信在两个开发板之间好使,其中一个换了最小系统版之间就没反映了

[复制链接]
1090|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenzeyu1994|  楼主 | 2016-4-23 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我之前用两个f103ze的开发板进行can通信是没有问题的,可是后来换了一个f103VE的最小系统版加vp230模块就没有反应了?程序设置里我已经换成f103VE了啊
沙发
chenzeyu1994|  楼主 | 2016-4-23 10:04 | 只看该作者
#include "can.h"

extern   CanTxMsg TxMessage;


/*
* 函数名:CAN_GPIO_Config
* 描述  :CAN的GPIO 配置,PB8上拉输入,PB9推挽输出
* 输入  :无
* 输出  : 无
* 调用  :内部调用
*/
void delay(vu32 nCount)
{
  for(; nCount != 0; nCount--);
}


static void CAN_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
          
          /*外设时钟设置*/
    SystemInit();
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO |RCC_APB2Periph_GPIOB, ENABLE);   
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

          /*IO设置*/
        GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);
        /* Configure CAN pin: RX */                                                                                       // PB8
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                     // 上拉输入
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
    /* Configure CAN pin: TX */                                                                                       // PB9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                         // 复用推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
}

/*
* 函数名:CAN_Mode_Config
* 描述  :CAN的模式 配置
* 输入  :无
* 输出  : 无
* 调用  :内部调用
*/
static void CAN_Mode_Config(void)
{
           CAN_InitTypeDef        CAN_InitStructure;
                 /************************CAN通信参数设置**********************************/
        /*CAN寄存器初始化*/
        CAN_DeInit(CAN1);
        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_Normal;  //正常工作模式
    CAN_InitStructure.CAN_SJW=CAN_SJW_2tq;                   //BTR-SJW 重新同步跳跃宽度 2个时间单元
    CAN_InitStructure.CAN_BS1=CAN_BS1_6tq;                   //BTR-TS1 时间段1 占用了6个时间单元
    CAN_InitStructure.CAN_BS2=CAN_BS2_3tq;                   //BTR-TS1 时间段2 占用了3个时间单元
    CAN_InitStructure.CAN_Prescaler =4;                   ////BTR-BRP 波特率分频器  定义了时间单元的时间长度 36/(1+6+3)/4=0.8Mbps
        CAN_Init(CAN1, &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)&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;                        //过滤器低16位每位必须匹配
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0 ;                                //过滤器被关联到FIFO0
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;                        //使能过滤器
        CAN_FilterInit(&CAN_FilterInitStructure);
        /*CAN通信中断使能*/
        CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
}


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


/*
* 函数名:CAN_SetMsg
* 描述  :CAN通信报文内容设置
* 输入  :无
* 输出  : 无
* 调用  :外部调用
*/         
void CAN_SetMsg1(void)
{          
  //TxMessage.StdId=0x00;                                                 
  TxMessage.ExtId=0x1314;                                         //使用的扩展ID
  TxMessage.IDE=CAN_ID_EXT;                                         //扩展模式
  TxMessage.RTR=CAN_RTR_DATA;                                 //发送的是数据
  TxMessage.DLC=1;                                                         //数据长度为2字节
  TxMessage.Data[0]=0xAB;

}
void CAN_SetMsg2(void)
{          
  //TxMessage.StdId=0x00;                                                 
  TxMessage.ExtId=0x1314;                                         //使用的扩展ID
  TxMessage.IDE=CAN_ID_EXT;                                         //扩展模式
  TxMessage.RTR=CAN_RTR_DATA;                                 //发送的是数据
  TxMessage.DLC=1;                                                         //数据长度为2字节
  TxMessage.Data[0]=0xCD;

}
void CAN_SetMsg3(void)
{          
  //TxMessage.StdId=0x00;                                                 
  TxMessage.ExtId=0x1314;                                         //使用的扩展ID
  TxMessage.IDE=CAN_ID_EXT;                                         //扩展模式
  TxMessage.RTR=CAN_RTR_DATA;                                 //发送的是数据
  TxMessage.DLC=1;                                                         //数据长度为2字节
  TxMessage.Data[0]=0x12;

}
void CAN_SetMsg4(void)
{          
  //TxMessage.StdId=0x00;                                                 
  TxMessage.ExtId=0x1314;                                         //使用的扩展ID
  TxMessage.IDE=CAN_ID_EXT;                                         //扩展模式
  TxMessage.RTR=CAN_RTR_DATA;                                 //发送的是数据
  TxMessage.DLC=1;                                                         //数据长度为2字节
  TxMessage.Data[0]=0x34;

}

使用特权

评论回复
板凳
chenzeyu1994|  楼主 | 2016-4-23 10:06 | 只看该作者
是重映射那边设置的不对么?还是我买的vp230模块有问题?

使用特权

评论回复
地板
Rooney30| | 2016-4-23 15:14 | 只看该作者
你的硬件电路也完全一样吗,你看看是不是这样?

使用特权

评论回复
5
chenzeyu1994|  楼主 | 2016-4-23 16:11 | 只看该作者
Rooney30 发表于 2016-4-23 15:14
你的硬件电路也完全一样吗,你看看是不是这样?

电路就是自己连了一个vp230模块,但是应该没问题。我现在不清楚是不是因为芯片从ze换成了ve在程序上有什么要注意的。这两个芯片设置波特率不一样么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝