打印
[STM32F1]

关于stm32 can配置

[复制链接]
1372|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小弟最近配置can通信,按照例程写得程序在PB8 PB9上输出正常,想要用PB12 PB13输出,然而遇到一点问题,一下午时间一直解决不了,请大神给我看看代码,到底是哪里配置错误了。[img][/img]
沙发
banxiafeixia|  楼主 | 2017-3-19 16:49 | 只看该作者
这个是can的引脚配置,之前配置的PB8 PB9输出没问题,但是改成PB12,PB13就没有输出了,不知原因为何,请大神解答一下可好。

can引脚配置.png (28.08 KB )

can引脚配置.png

使用特权

评论回复
板凳
banxiafeixia|  楼主 | 2017-3-19 16:52 | 只看该作者
这是can的配置文件,一块贴上来。
#include "can.h"
#include "stm32f10x_can.h"
unsigned int CAN_ID;
unsigned char CAN_DATA0,CAN_DATA1,CAN_DATA2,CAN_DATA3,CAN_DATA4,CAN_DATA5,CAN_DATA6,CAN_DATA7;
unsigned char CanFlag,Display;
//extern void GPIO_Configuration(void);
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  /* CAN Periph clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO ,ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE);
  /* Configure CAN pin : RX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);   
  /* Configure CAN pin: TX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOB, &GPIO_InitStructure);             
                                 
}
void 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;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void CAN_Configuration(void)
{
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;

  NVIC_Configuration();
  GPIO_Configuration();
  /* CAN register init */
  CAN_DeInit(CAN1);
  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 = ENABLE;  
  CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
  CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;   
  CAN_InitStructure.CAN_BS1 = CAN_BS1_4tq;   
  CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;     
  CAN_InitStructure.CAN_Prescaler = 45;     


  if (CAN_Init(CAN1,&CAN_InitStructure) == CANINITFAILED)                
  {
                                                                                                               
                                                                                                                                  
  }       


  CAN_FilterInitStructure.CAN_FilterNumber=0;     
  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;  /* ÆÁ±Öģʽ */
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; /* 32λ */
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;  /* ÒÔÏÂËĸö¶¼Îª0, ±íÃ÷²»¹ýÂËÈκÎid */
  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;  /* Äܹ»Í¨¹ý¸Ã¹ýÂËÆ÷µÄ±¨ÎÄ´æµ½fifo0ÖÐ */
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
  CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);   /* ¹ÒºÅÖжÏ, ½øÈëÖжϺó¶ÁfifoµÄ±¨Îĺ¯ÊýÊͷű¨ÎÄÇåÖжϱêÖ¾ */
  CAN_FilterInit(&CAN_FilterInitStructure);
}
       
void CANWriteData(unsigned int ID)
{
  CanTxMsg TxMessage;

  CAN_DATA0=0x01;  CAN_DATA1=0x02;  
  CAN_DATA2=0x03;  CAN_DATA3=0x04;  
  CAN_DATA4=0x05;  CAN_DATA5=0x06;
  CAN_DATA6=0x07;  CAN_DATA7=0x08;

  /* transmit */
  TxMessage.StdId = ID;  /* ÉèÖñê×¼id  ×¢Òâ±ê×¼idµÄ×î¸ß7λ²»ÄÜÈ«ÊÇÒþÐÔ(1)¡£¹²11λ */
//TxMessage.ExtId = 0x00;     //ÉèÖÃÀ©Õ¹id  À©Õ¹id¹²18λ
  TxMessage.RTR = CAN_RTR_DATA; /* ÉèÖÃΪÊý¾ÝÖ¡ */
  TxMessage.IDE = CAN_ID_STD;   /* ʹÓñê×¼id        */
  TxMessage.DLC = 8;            /* Êý¾Ý³¤¶È, can±¨ÎĹ涨×î´óµÄÊý¾Ý³¤¶ÈΪ8×Ö½Ú */
  TxMessage.Data[0] = CAN_DATA0;   
  TxMessage.Data[1] = CAN_DATA1;   
  TxMessage.Data[2] = CAN_DATA2;   
  TxMessage.Data[3] = CAN_DATA3;   
  TxMessage.Data[4] = CAN_DATA4;   
  TxMessage.Data[5] = CAN_DATA5;     
  TxMessage.Data[6] = CAN_DATA6;   
  TxMessage.Data[7] = CAN_DATA7;      
  CAN_Transmit(CAN1,&TxMessage);  /* ·µ»ØÕâ¸öÐÅÏ¢ÇëÇó·¢Ë͵ÄÓÊÏäºÅ0,1,2»òûÓÐÓÊÏäÉêÇë·¢ËÍno_box */       
}
void USB_LP_CAN1_RX0_IRQHandler(void)
{
  CanRxMsg RxMessage;
  CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);  /* ´Ëº¯Êý°üº¬ÊÍ·ÅÌá³ö±¨ÎÄÁ˵Ä,ÔڷDZØҪʱ,²»ÐèÒª×Ô¼ºÊÍ·Å */
  CAN_ID=RxMessage.StdId;
  CAN_DATA0=RxMessage.Data[0];
  CAN_DATA1=RxMessage.Data[1];
  CAN_DATA2=RxMessage.Data[2];
  CAN_DATA3=RxMessage.Data[3];
  CAN_DATA4=RxMessage.Data[4];
  CAN_DATA5=RxMessage.Data[5];
  CAN_DATA6=RxMessage.Data[6];
  CAN_DATA7=RxMessage.Data[7];
  CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);  /* Çå³ý¹ÒÆðÖÐ¶Ï */
  CanFlag = ENABLE;
}

使用特权

评论回复
地板
banxiafeixia|  楼主 | 2017-3-19 16:58 | 只看该作者
哦对了,当我配置成PB12 PB13时候,can分析仪的线接在PB12 PB13上时候,can分析仪会有打开设备失败的现象、

使用特权

评论回复
5
yiilanying| | 2017-3-19 21:14 | 只看该作者
你的配置有问题,应该是CAN2吧!

)1A{5DYX~MK(2N6C0EG[~LO.png (88.57 KB )

)1A{5DYX~MK(2N6C0EG[~LO.png

使用特权

评论回复
6
zhuomuniao110| | 2017-3-19 22:04 | 只看该作者
楼上说的对,你配置的还是CAN1.

使用特权

评论回复
7
@若水| | 2017-3-20 13:06 | 只看该作者
配置一下管脚的复用功能试试

使用特权

评论回复
8
拉克丝| | 2017-3-21 21:19 | 只看该作者
配置一下管脚的复用功能试试

配置复用功能干什么?

使用特权

评论回复
9
gygp| | 2017-3-21 23:16 | 只看该作者
CAN不是能够自测吗?

使用特权

评论回复
10
gygp| | 2017-3-21 23:21 | 只看该作者
数据输出存在问题吗?

使用特权

评论回复
11
banxiafeixia|  楼主 | 2017-3-31 15:27 | 只看该作者
yiilanying 发表于 2017-3-19 21:14
你的配置有问题,应该是CAN2吧!

感谢大神,的确是这样的。。。话说你的这个stm32手册是哪里来的啊,一直想找这样一本手册随时看,似乎网上找不到啊。

使用特权

评论回复
12
yiilanying| | 2017-4-1 20:27 | 只看该作者
banxiafeixia 发表于 2017-3-31 15:27
感谢大神,的确是这样的。。。话说你的这个stm32手册是哪里来的啊,一直想找这样一本手册随时看,似乎网 ...

网上很多,名字为STM32中文参考手册,若真找不到,加qq1292054617我发给你一份

使用特权

评论回复
13
kkzz| | 2017-4-1 22:56 | 只看该作者
CAN能够自测收发

使用特权

评论回复
14
kkzz| | 2017-4-1 23:01 | 只看该作者
IO需要重新映射了吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

93

帖子

2

粉丝