OpenEdv-开源电子网

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

STM32F072CBT6,调试CAN,换回模式收发都没有问题,但是接上USBCAN分析仪后,MCU给电脑发送,电脑上的的软件收不到数据;电脑...

[复制链接]

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2011-5-27
在线时间
11 小时
发表于 2019-8-8 11:35:59 | 显示全部楼层 |阅读模式
1金钱
各位大神,我用的STM32F072CBT6,调试CAN,换回模式收发都没有问题,但是接上USBCAN分析仪后,MCU给电脑发送,电脑上的的软件收不到数据;电脑软件给MCU发送,USBCAN的error灯亮,MCU收不到数据。哪位大神调过F072的CAN,指教一下!!!
  GPIO_InitTypeDef  GPIO_InitStructure;
  NVIC_InitTypeDef  NVIC_InitStructure;
  CAN_InitTypeDef  CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  uint32_t i = 0;
  uint8_t TransmitMailbox = 0;

  /* NVIC configuration *******************************************************/
  /* Enable CAN RX0 interrupt IRQ channel */
  NVIC_InitStructure.NVIC_IRQChannel = CEC_CAN_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  /* CAN GPIOs configuration **************************************************/

  /* Enable GPIO clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

  /* Connect CAN pins to AF4 */
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_4);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_4);

  /* Configure CAN RX and TX pins */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 |GPIO_Pin_12;//
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;// | GPIO_Pin_12
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
////  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
//  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
//  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* CAN configuration ********************************************************/  
  /* Enable CAN clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);

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

  /* CAN cell init */
  CAN_InitStructure.CAN_TTCM = DISABLE;
  CAN_InitStructure.CAN_ABOM = DISABLE;
  CAN_InitStructure.CAN_AWUM = DISABLE;
  CAN_InitStructure.CAN_NART = DISABLE;
  CAN_InitStructure.CAN_RFLM = DISABLE;
  CAN_InitStructure.CAN_TXFP = DISABLE;
  CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack;//CAN_Mode_Normal
  CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;

  /* CAN Baudrate = 1MBps (CAN clocked at 36 MHz) */
  CAN_InitStructure.CAN_BS1 = CAN_BS1_9tq;//CAN_BS1_9tq
  CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;//CAN_BS2_8tq
  CAN_InitStructure.CAN_Prescaler = 4;//2
  //  CAN_Baud_Process(500,&CAN_InitStructure);
  CAN_Init(CAN, &CAN_InitStructure);

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

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

/* transmit */
  TxMessage.StdId = 1;
  TxMessage.ExtId = 0;
  TxMessage.IDE = CAN_Id_Standard;
  TxMessage.RTR = CAN_RTR_DATA;
  TxMessage.DLC = 2;
  TxMessage.Data[0] = 0xCA;
  TxMessage.Data[1] = 0xFE;

  CAN_Transmit(CAN, &TxMessage);



最佳答案

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

问题解决了,官方例程里的注释为CAN总线频率为36MH在,这个注释是错误的,CAN是挂在APB总线上的,所以CAN总线的频率应该为48MHz,所以根据48MHz来计算波特率才对。 下面是250kbps的配置 /* CAN Baudrate = 1MBps (CAN clocked at 48 MHz) */ CAN_InitStructure.CAN_BS1 = CAN_BS1_9tq;//CAN_BS1_9tq CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;//CAN_BS2_8tq CAN_InitStructure.CAN_Prescaler = 16;//2 // CAN_Bau ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2011-5-27
在线时间
11 小时
 楼主| 发表于 2019-8-8 11:36:00 | 显示全部楼层
问题解决了,官方例程里的注释为CAN总线频率为36MH在,这个注释是错误的,CAN是挂在APB总线上的,所以CAN总线的频率应该为48MHz,所以根据48MHz来计算波特率才对。
下面是250kbps的配置
/* CAN Baudrate = 1MBps (CAN clocked at 48 MHz) */
  CAN_InitStructure.CAN_BS1 = CAN_BS1_9tq;//CAN_BS1_9tq
  CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;//CAN_BS2_8tq
  CAN_InitStructure.CAN_Prescaler = 16;//2
  //  CAN_Baud_Process(500,&CAN_InitStructure);
  CAN_Init(CAN, &CAN_InitStructure);
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7369
金钱
7369
注册时间
2016-11-30
在线时间
632 小时
发表于 2019-8-8 14:18:07 | 显示全部楼层
用示波器量一下波形吧,看看Tx和Rx的波形
回复

使用道具 举报

2

主题

106

帖子

0

精华

高级会员

Rank: 4

积分
714
金钱
714
注册时间
2011-5-15
在线时间
147 小时
发表于 2019-8-8 16:06:32 | 显示全部楼层
CAN_H、CAN_L的连接有没有错
PC端和MCU端的波特率设置是否一致
终端电阻
回复

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2011-5-27
在线时间
11 小时
 楼主| 发表于 2019-8-8 19:53:02 | 显示全部楼层
lvkanger 发表于 2019-8-8 14:18
用示波器量一下波形吧,看看Tx和Rx的波形

示波器测了,072的高电平一直是高
回复

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2011-5-27
在线时间
11 小时
 楼主| 发表于 2019-8-8 19:53:48 | 显示全部楼层
chunglin 发表于 2019-8-8 16:06
CAN_H、CAN_L的连接有没有错
PC端和MCU端的波特率设置是否一致
终端电阻

刚用示波器测了072的TX引脚,输出一直是高
回复

使用道具 举报

9

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2011-5-27
在线时间
11 小时
 楼主| 发表于 2019-8-8 22:17:24 | 显示全部楼层
问题已解决。官方提供的例程里面的注释是错误的,官方注释CAN总线频率为36MHz,官方用户手册介绍CAN是挂在APB总线上,而APB总线是48MHz,所以波特率要根据48MHz来计算,不能根据36MHz计算。
如下配置,波特率为250kbps。
  /* CAN Baudrate = 1MBps (CAN clocked at 48 MHz) */
  CAN_InitStructure.CAN_BS1 = CAN_BS1_9tq;//CAN_BS1_9tq
  CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;//CAN_BS2_8tq
  CAN_InitStructure.CAN_Prescaler = 16;//2
  //  CAN_Baud_Process(500,&CAN_InitStructure);
  CAN_Init(CAN, &CAN_InitStructure);
回复

使用道具 举报

0

主题

18

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2020-6-8
在线时间
13 小时
发表于 2022-8-31 14:25:07 | 显示全部楼层
发送数据是可以,就是接收数据有异常,中断不响应,读不到数据
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 04:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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