OpenEdv-开源电子网

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

原子哥的stm32的can程序怎么和和can分析仪通信参数怎么设置???

[复制链接]

19

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2013-7-22
在线时间
3 小时
发表于 2015-3-20 10:38:14 | 显示全部楼层 |阅读模式
5金钱
上位机的波特率怎么设置说详细点。最好的每个选项都说一下,谢谢啦!!!
程序采用的是原子哥的can程序,参数怎么设置才能让stm32的can和can分析仪通信,stm32的回环模式已经跑通,现在是采用的正常模式。


发送参数设置:
u8 Can_Send_Msg(u8* msg,u8 len)

  u8 mbox;
  u16 i=0;
  CanTxMsg TxMessage;
  TxMessage.StdId=0x12; // 
  TxMessage.ExtId=0x12; // 
  TxMessage.IDE=0; // 
  TxMessage.RTR=0; // 
  TxMessage.DLC=len; //
  for(i=0;i<8;i++)
  TxMessage.Data=msg; //      
  mbox= CAN_Transmit(CAN1, &TxMessage);   
  i=0;
  while((CAN_TransmitStatus(CAN1, mbox)!=CAN_TxStatus_Failed)&&(i<0XFFF))i++; //
  if(i>=0XFFF)return 1;
  return 0; 
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
can参数设置

  CAN_InitStructure.CAN_TTCM=DISABLE; 
  CAN_InitStructure.CAN_ABOM=DISABLE; 
  CAN_InitStructure.CAN_AWUM=DISABLE; 
  CAN_InitStructure.CAN_NART=ENABLE; 
  CAN_InitStructure.CAN_RFLM=DISABLE; 
  CAN_InitStructure.CAN_TXFP=DISABLE; 
  CAN_InitStructure.CAN_Mode= mode;        
  CAN_InitStructure.CAN_SJW=tsjw;
  CAN_InitStructure.CAN_BS1=tbs1; 
  CAN_InitStructure.CAN_BS2=tbs2;
  CAN_InitStructure.CAN_Prescaler=brp;            
  CAN_Init(CAN1, &CAN_InitStructure);           

  CAN_FilterInitStructure.CAN_FilterNumber=0; 
  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_Filter_FIFO0;
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; 

  CAN_FilterInit(&CAN_FilterInitStructure);
#if CAN_RX0_INT_ENABLE

CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);
  
  NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;    
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;          
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

最佳答案

查看完整内容[请看2#楼]

CAN_Mode_Init(1,8,9,4,mode);//CAN初始化,波特率500Kbps  用这个配置,可设置为500Kbps
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-20 10:38:15 | 显示全部楼层
CAN_Mode_Init(1,8,9,4,mode);//CAN初始化,波特率500Kbps 
用这个配置,可设置为500Kbps
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2014-11-13
在线时间
28 小时
发表于 2015-3-20 22:32:48 | 显示全部楼层
CAN分析仪有侦测波特率的功能,战舰例程里的波特率是450k,用CAN分析仪侦测匹配的波特率是444.4k,当然你也可以修改程序里影响波特率的参数以适配其它波特率。
回复

使用道具 举报

19

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2013-7-22
在线时间
3 小时
 楼主| 发表于 2015-3-23 14:37:47 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
滤波器部分该怎么设置呢???回复【3楼】正点原子:
---------------------------------
原子哥设置好后,串口监控CAN能发出数据,怎么就是测不到数据呢,看不见波形
res=Can_Send_Msg(canbuf,8);//发送八个字节
if(res)printf("发送失败"); //发送失败
else printf("发送成功");   //发送成功

我发送ID为0x321,接收的滤波器则为0x642,对吗?
回复

使用道具 举报

19

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2013-7-22
在线时间
3 小时
 楼主| 发表于 2015-3-23 14:40:16 | 显示全部楼层
回复【2楼】youhm:
---------------------------------
如果stm32上的can管脚没有外接电平转换芯片,在环回模式下,tx发出数据时能用示波器看到吗???
我这边用示波器看不见波形
回复

使用道具 举报

19

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2013-7-22
在线时间
3 小时
 楼主| 发表于 2015-3-23 16:25:42 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥问题解决了,发现了点问题,在你的can程序中出现了点问题。
1.在你的can程序中函数在初始化封装后出现错误
在can.c中:
u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
在main.c主函数中:
CAN_Mode_Init(CAN_SJW_1tq,CAN_BS1_8tq,CAN_BS2_7tq,5,CAN_Mode_LoopBack);
其中tbs2对应了CAN_BS1_8tq、tbs1对应了CAN_BS2_7tq,会导致波特率计算错误,can在正常模式就会无法通信

2.在can.c中发送函数u8 Can_Send_Msg(u8* msg,u8 len)里,发送完成后返回值总是1,应该是if(i>=0XFFF)return 1;中i的值超过0xfff,应该表示超时错误
同时在主函数中
res=Can_Send_Msg(canbuf,8);//
if(res)LCD_ShowString(60+80,190,200,16,16,"Failed");
else LCD_ShowString(60+80,190,200,16,16,"OK    ");  
返回值为1表示发送失败,但我在实际调试中,数据发送成功,i的最大值为何为为oxfff?????
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-23 16:49:37 | 显示全部楼层
回复【6楼】有一点心动杜:
---------------------------------
1,库函数是有点bug,要改一下。
2,这只是个范围限定,你可以设置大一点。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2014-11-13
在线时间
28 小时
发表于 2015-3-23 21:10:44 | 显示全部楼层
回复【5楼】有一点心动杜:
---------------------------------
环回模式是没有输出的。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-24 18:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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