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

stm32f072 can调试

[复制链接]
cyborg2008 提问时间:2019-10-10 09:28 /
之前一直用f103系列的,刚接触f072,总体是差不多的,can用的是PA11和PA12管脚,loopback没问题,Normal 模式收发都不行,can收发器肯定没问题,在f103平台上验证过的,感觉还是软件上没有配置好,参考了官方的代码,下面是can的配置代码:

#define CANx                                  CAN
#define CAN_CLK                            RCC_APB1Periph_CAN
#define CAN_RX_PIN                      GPIO_Pin_11
#define CAN_TX_PIN                      GPIO_Pin_12
#define CAN_GPIO_PORT               GPIOA
#define CAN_GPIO_CLK                  RCC_AHBPeriph_GPIOA
#define CAN_AF_PORT                   GPIO_AF_4
#define CAN_RX_SOURCE              GPIO_PinSource11
#define CAN_TX_SOURCE              GPIO_PinSource12



static void CAN_Config(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  NVIC_InitTypeDef  NVIC_InitStructure;
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;

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

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

  /* Connect CAN pins to AF7 */
  GPIO_PinAFConfig(CAN_GPIO_PORT, CAN_RX_SOURCE, CAN_AF_PORT);
  GPIO_PinAFConfig(CAN_GPIO_PORT, CAN_TX_SOURCE, CAN_AF_PORT);

  /* Configure CAN RX and TX pins */
  GPIO_InitStructure.GPIO_Pin = CAN_RX_PIN | CAN_TX_PIN;
  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(CAN_GPIO_PORT, &GPIO_InitStructure);

  /* NVIC configuration *******************************************************/
  NVIC_InitStructure.NVIC_IRQChannel = CEC_CAN_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

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

  /* CAN register init */
  CAN_DeInit(CANx);
  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_Normal;
  CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;

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

  /* 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);

  /* Enable FIFO 0 message pending Interrupt */
  CAN_ITConfig(CANx, CAN_IT_FMP0, ENABLE);
}


中断响应函数:
void CEC_CAN_IRQHandler(void)
{
  if(CAN_GetITStatus(CAN, CAN_IT_FMP0) != RESET)
  {      
    CAN_Receive(CAN, CAN_FIFO0, &RxMessage);
    printf("CAN IRQ");
}


用的是外部8M晶振,总线时钟按HAL库默认的配置,请大神指点一下,万分感激!!



收藏 1 评论5 发布时间:2019-10-10 09:28

举报

5个回答
watershade 回答时间:2019-10-13 17:01:40
我暂时不能确定你的问题。
我说一下我之前遇到类似的问题。我的情况也是loopback是可以的。我也认为自己的收发器没问题。
结果呢?
我的收发器使用的是5V供电,但调试的时候图方便,直接从外部为单片机系统供的3.3v。5V没有单独供电。
这就出了问题。

不知道你手边现在有没有CAN分析仪,最好把你的电路和CAN分析仪连接起来再测试。
奏奏奏 回答时间:2019-10-13 17:19:41
补充一下别的需要检查的地方:
(1)总线匹配首尾各1个120欧电阻接入没有?
(2)因为F0系列与F1系列最高工作频率不一样,CAN通讯的波特率计算可能会出错,楼主重新检查一遍。
(3)看代码楼主用的是标准库函数,而并非是HAL库,楼主先要检查一下F0的标准库是否工作正常。比如说配置晶振时钟是否正确,用一个IO口点灯看一下是否能隔3秒反转一次。如果晶振都不起振那就更不要说CAN通讯了。
废鱼 回答时间:2019-10-13 20:04:39
楼主,您好,请注意一下CAN芯片的模式,以前发生过类似问题,是因为CAN芯片没有进入正常模式,一直处于低功耗模式下,才导致出的问题。
mylovemcu 回答时间:2019-10-14 08:20:22
口线配置正确不  一个发送 一个接收
再就是频率问题  晶振采用系统默认晶振  主频是否一致  
w_q123 回答时间:2024-5-7 21:34:19

您好,请问问题解决了吗?我也遇到了同样的问题,搞了两天了没有进展,谢谢!

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版