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

查看: 7672|回复: 6

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

[复制链接]

3

主题

12

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2010-8-27 10:42:51 | 显示全部楼层 |阅读模式
STM32的CAN 自己弄了2星期了,还是一点进展没有。买了一个USB-CAN的模块用来调试,可是还是没有任何进展
我用的是万利的STM32310B-LK1开发板,哪位老师能提供一个可以用的文件啊,自己是在是山穷水尽了
<
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2010-8-27 14:52:02 | 显示全部楼层

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

1、检查CAN配置
2、buffer设置
3、可以使用例程,看看USB-CAN是否能够接收到数据
4、CAN使用流程:配置CAN总线-&gt;发送或者接收buffer-&gt;开启中断-&gt;判断接收buffer-&gt;读取数据。
回复 支持 反对

使用道具 举报

3

主题

12

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 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总线-&gt;发送或者接收buffer-&gt;开启中断-&gt;判断接收buffer-&gt;读取数据。 

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

使用道具 举报

3

主题

12

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2010-9-10 15:28:31 | 显示全部楼层

问题找到了

原来是我使用早期的库函数,
#define GPIO_Remap1_CAN ((u32)0x001D4000) /* CAN Alternate Function mapping */
早期的函数定义成0x001D2000了
回复 支持 反对

使用道具 举报

0

主题

13

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 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, &amp;GPIO_InitStructure);
  
  /* Configure CAN pin: TX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &amp;GPIO_InitStructure);


 


  /* CAN register init */
  //CAN_DeInit();
  CAN_StructInit(&amp;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(&amp;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(&amp;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(&amp;TxMessage);
   i = 0;
   test=CAN_TransmitStatus(TransmitMailbox) ;
  while((test!= CANTXOK) &amp;&amp; (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
 
回复 支持 反对

使用道具 举报

0

主题

13

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-1-12 15:11:31 | 显示全部楼层

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

亟待您的解决,谢谢哦
回复 支持 反对

使用道具 举报

0

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 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, &amp;GPIO_InitStructure);
  
  /* Configure CAN pin: TX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &amp;GPIO_InitStructure);
改成

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

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版