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

自己奋战了2周,STM32的CAN还是不明白,希望高人指点

[复制链接]
a605932016 提问时间:2010-8-27 10:42 /
STM32的CAN 自己弄了2星期了,还是一点进展没有。买了一个USB-CAN的模块用来调试,可是还是没有任何进展
我用的是万利的STM32310B-LK1开发板,哪位老师能提供一个可以用的文件啊,自己是在是山穷水尽了
收藏 评论6 发布时间:2010-8-27 10:42

举报

6个回答
废鱼 回答时间:2010-8-27 14:52:02

RE:自己奋战了2周,STM32的CAN还是不明白,希望高人指点

1、检查CAN配置
2、buffer设置
3、可以使用例程,看看USB-CAN是否能够接收到数据
4、CAN使用流程:配置CAN总线->发送或者接收buffer->开启中断->判断接收buffer->读取数据。
a605932016 回答时间:2010-9-8 14:41:56

回复:自己奋战了2周,STM32的CAN还是不明白,希望高人指点

回复第 2 楼 安 于2010-08-27 06:52:02发表:
1、检查CAN配置
2、buffer设置
3、可以使用例程,看看USB-CAN是否能够接收到数据
4、CAN使用流程:配置CAN总线->发送或者接收buffer->开启中断->判断接收buffer->读取数据。 

谢谢,终于在实验板上调通了,用USB-CAN和万利的实验板,可是又遇到新的问题了
万利的实验板CAN用的是PD0,PD1,我自己做的板子上用的是PB8 PB9
PD0 PD1是可以通信的,但是我想映射到PB8 PB9,做了如下的更改
1.配置PB8 PB9
 2.打开B口的时钟
3打开映射  GPIO_Remap1_CAN
但是在PB8 9上看不到也接受不到数据,请教一下还有什么疏漏吗
a605932016 回答时间:2010-9-10 15:28:31

问题找到了

原来是我使用早期的库函数,
#define GPIO_Remap1_CAN ((u32)0x001D4000) /* CAN Alternate Function mapping */
早期的函数定义成0x001D2000了
wangzhecumt-154 回答时间:2011-1-12 15:10:16

回复:自己奋战了2周,STM32的CAN还是不明白,希望高人指点

 你好啊,我也是pb8 pb9端口进行can通信,就是发送失败不知道是什么问题;
我的程序如下,你帮我看看,好不好,谢谢
 
GPIO_InitTypeDef GPIO_InitStructure;
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  CanTxMsg TxMessage;
  u8 TransmitMailbox;
  u8 i=0;
  u8 test;
  
  GPIO_PinRemapConfig(GPIO_Remap1_CAN, ENABLE);// remap
  /* Configure CAN pin: RX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  
  /* Configure CAN pin: TX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);


 


  /* CAN register init */
  //CAN_DeInit();
  CAN_StructInit(&CAN_InitStructure);


  /* CAN cell init */
  CAN_InitStructure.CAN_TTCM=DISABLE;  //禁止时间触发通信;
  CAN_InitStructure.CAN_ABOM=DISABLE;  //离线退出是在中断置位清零后退出;
  CAN_InitStructure.CAN_AWUM=DISABLE; //自动唤醒模式:清零SLEEP;
  CAN_InitStructure.CAN_NART=ENABLE; //自动重新传送报文,直到发送成功;
  CAN_InitStructure.CAN_RFLM=DISABLE; //FIFO没有锁定,新报文覆盖旧报文;
  CAN_InitStructure.CAN_TXFP=DISABLE; //发送报文优先级确定;标识符;
  CAN_InitStructure.CAN_Mode=CAN_Mode_Normal; //can 模式选择;
   //CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;
  CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
  CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
  CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
  CAN_InitStructure.CAN_Prescaler=7;           //250k;
  CAN_Init(&CAN_InitStructure);
  /*
     波特率=1/(3+bs1+bs2)tq;
         tq=tpclk*(prescaler+1)
  */


  /* CAN filter init */
  CAN_FilterInitStructure.CAN_FilterNumber=1;
  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);


  /* CAN FIFO0 message pending interrupt enable */ 
  //CAN_ITConfig(CAN_IT_FMP0, ENABLE);


  /* transmit 1 message */
  //while(1)
  {
  TxMessage.StdId=0x11;
  TxMessage.ExtId=0x1234;
  TxMessage.IDE=CAN_ID_STD;
  TxMessage.RTR=CAN_RTR_DATA;
  TxMessage.DLC=2;
  TxMessage.Data[0]=0xDE;
  TxMessage.Data[1]=0xCA;
  TransmitMailbox=CAN_Transmit(&TxMessage);
   i = 0;
   test=CAN_TransmitStatus(TransmitMailbox) ;
  while((test!= CANTXOK) && (i != 0xFF)) 
  {
    i++; 
        test=CAN_TransmitStatus(TransmitMailbox) ;        }


  }
   if(test== CANTXOK)       
        {
        UART1_Putchar('\n');
        UART1_Putchar('o');
        UART1_Putchar('k');
        UART1_Putchar('\n');
        } 
        else if(test==0)
        {
        UART1_Putchar('F');
        }
        else if(test==2)
        {
        UART1_Putchar('p');
        }
 
  }


发送后是是失败的,输出 F
 
wangzhecumt-154 回答时间:2011-1-12 15:11:31

RE:自己奋战了2周,STM32的CAN还是不明白,希望高人指点

亟待您的解决,谢谢哦
von81 回答时间:2011-1-19 13:22:52

RE:自己奋战了2周,STM32的CAN还是不明白,希望高人指点

GPIO_PinRemapConfig(GPIO_Remap1_CAN, ENABLE);// remap
  /* Configure CAN pin: RX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  
  /* Configure CAN pin: TX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
改成

  /* Configure CAN pin: RX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  
  /* Configure CAN pin: TX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_Remap1_CAN, ENABLE);// remap

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版