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

查看: 9456|回复: 5

stm32的can调试时,can-tx引脚没有数据输出

[复制链接]

1

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-2-14 17:47:59 | 显示全部楼层 |阅读模式
<span style="font-size: medium; "><span style="font-family: 宋体; ">  各位砖家: 
使用stm32的开发板有一个多月了,在实验can端口,碰到了问题,can_TX管脚没有数据输出,想了很多办法一直没有解决。 

--------------------------------------------------------------------------------------------------------------------------- 

首先是开发板的例程,can工作的回环模式(CAN_Mode_LoopBack) 
按照ST的参考手册,此时TX内部与RX连接,同时外部的TX脚仍然有信号输出。 

例程下载成功,也从串口收到了成功的提示信息,如: 

 这个一个CAN(回环模式和中断模式)测试程序......  

 CAN 回环测试初始化成功......  

 CAN 回环测试成功......  

 这个一个CAN(回环模式和中断模式)测试程序......  

 CAN 回环测试初始化成功......  

 CAN 回环测试成功......  

但无论是示波器,还是逻辑分析仪,都无法从CAN_TX(PB9)上采集到相关的CAN数据。 

--------------------------------------------------------------------------------------------------------------------------- 

在这个例程中,CAN初始化是这样的: 

/* 
 * 函数名:CAN_GPIO_Config 
 * 描述  :CAN GPIO 和时钟配置 
 * 输入  :无 
 * 输出  : 无 
 * 调用  :内部调用 
 */ 
static void CAN_GPIO_Config(void) 

  GPIO_InitTypeDef GPIO_InitStructure;  
  
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOA, ENABLE);                                           

  /* CAN1 Periph clock enable */ 
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); 

  /* Configure CAN pin: RX */                        // PB8 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                     // 上拉输入 
  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_Init(GPIOB, &GPIO_InitStructure); 

//#define GPIO_Remap_CAN    GPIO_Remap1_CAN1 本实验没有用到重映射I/O 
  GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE); 



/* 
 * 函数名:CAN_NVIC_Configuration 
 * 描述  :CAN RX0 中断优先级配置 
 * 输入  :无 
 * 输出  : 无 
 * 调用  :内部调用 
 */ 
static void CAN_NVIC_Configuration(void) 

  NVIC_InitTypeDef NVIC_InitStructure; 

  /* Enable CAN1 RX0 interrupt IRQ channel */ 
  NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; 
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;     // 主优先级为0 
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // 次优先级为0 
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
  NVIC_Init(&NVIC_InitStructure); 


/* 
 * 函数名:CAN_Polling 
 * 描述  :配置 CAN 的工作模式为 回环模式 
 * 输入  :无 
 * 输出  : -PASSED   成功 
 *         -FAILED   失败 
 * 调用  :内部调用 
 */ 
TestStatus CAN_Polling(void) 

  CAN_InitTypeDef        CAN_InitStructure; 
  CAN_FilterInitTypeDef  CAN_FilterInitStructure; 
  CanTxMsg TxMessage; 
  CanRxMsg RxMessage; 
  uint32_t i = 0; 
  uint8_t TransmitMailbox = 0; 

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

  /* CAN cell init */ 
  CAN_InitStructure.CAN_TTCM=DISABLE;          // 时间触发通信禁止 
  CAN_InitStructure.CAN_ABOM=DISABLE;          // 离线退出是在中断置位清0后退出 
  CAN_InitStructure.CAN_AWUM=DISABLE;          // 自动唤醒模式:清零sleep 
  CAN_InitStructure.CAN_NART=DISABLE;          // 自动重新传送豹纹,知道发送成功 
  CAN_InitStructure.CAN_RFLM=DISABLE;          // FIFO没有锁定,新报文覆盖旧报文   
  CAN_InitStructure.CAN_TXFP=DISABLE;          // 发送报文优先级确定:标志符 
  CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;         // 回环模式 
  CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;          // 1tq、BS1、BS2的值跟波特率有关 
  CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; 
  CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; 
  CAN_InitStructure.CAN_Prescaler=5;             // 分频系数为5 
  CAN_Init(CAN1, &CAN_InitStructure);            // 初始化CAN1  

  /* CAN filter init */ 
  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=0; 
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; 
  CAN_FilterInit(&CAN_FilterInitStructure); 

  /* transmit */ 
  TxMessage.StdId=0x11;         // 设定标准标识符(11位,扩展的为29位) 
  TxMessage.RTR=CAN_RTR_DATA;        // 传输消息的帧类型为数据帧(还有远程帧) 
  TxMessage.IDE=CAN_ID_STD;         // 消息标志符实验标准标识符 
  TxMessage.DLC=2;           // 发送两帧,一帧8位 
  TxMessage.Data[0]=0xCA;         // 第一帧数据 
  TxMessage.Data[1]=0xFE;         // 第二帧数据 

  TransmitMailbox=CAN_Transmit(CAN1, &TxMessage); 
  i = 0; 
// 用于检查消息传输是否正常 
  while((CAN_TransmitStatus(CAN1, TransmitMailbox) != CANTXOK) && (i != 0xFF)) 
  { 
    i++; 
  } 

  i = 0; 
// 检查返回的挂号的信息数目 
<span style="line-height: 21px; background-color: rgb(209, 217, 226); ">  while((CAN_MessagePending(CAN1, CAN_FIFO0) 
<
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-2-15 10:44:44 | 显示全部楼层

RE:stm32的can调试时,can-tx引脚没有数据输出

循环模式,是指CAN通过内部连接起来,而外部CANRX引脚是不会有数据的.这个你可以详细阅读手册的CAN循环模式.
环回模式可用于自测试。为了避免外部的影响,在环回模式下CAN内核忽略确认错误(在数据/远程帧的确认位时刻,不检测是否有显性位)。在环回模式下,bxCAN在内部把Tx输出回馈到Rx输入上,而完全忽略CANRX引脚的实际状态。发送的报文可以在CANTX引脚上检测到。
回复 支持 1 反对 0

使用道具 举报

0

主题

7

回帖

0

蝴蝶豆

中级会员

最后登录
2019-5-16
发表于 2016-10-21 10:45:02 | 显示全部楼层
楼主  我也遇到这个问题...想请教下
回复 支持 反对

使用道具 举报

53

主题

445

回帖

152

蝴蝶豆

论坛元老

最后登录
2020-12-7
发表于 2016-10-21 12:45:29 | 显示全部楼层
安 发表于 2012-2-15 10:44
循环模式,是指CAN通过内部连接起来,而外部CANRX引脚是不会有数据的.这个你可以详细阅读手册的CAN循环模式.
...

跟版主学习一下,最近做的项目有用CAN通讯
回复 支持 反对

使用道具 举报

6

主题

160

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-10-21
发表于 2016-10-21 13:14:17 | 显示全部楼层
回复 支持 反对

使用道具 举报

2

主题

134

回帖

0

蝴蝶豆

中级会员

最后登录
2017-8-3
发表于 2016-10-26 11:02:48 | 显示全部楼层
为啥我在做环回模式的时候,也能用示波器看出接收端的波形呢。。。
回复 支持 反对

使用道具 举报

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