打印
[其他ST产品]

CAN总线调试的一点心得总结

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
21
个百zz分点个|  楼主 | 2021-10-26 23:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
3.2.2 自设板
void CAN_GPIOA_Config(void)  
{  
GPIO_InitTypeDef GPIO_InitStructure;     
/* CAN Periph clock enable */  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);  
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);  
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);  
  
  /* Configure CAN pin: TX */  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;  
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
  GPIO_Init(GPIOA, &GPIO_InitStructure);     
/* Configure CAN pin: RX */  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;   
  GPIO_Init(GPIOA, &GPIO_InitStructure);     
  //GPIO_PinRemapConfig(GPIO_Remap1_CAN1 , ENABLE);  
}

使用特权

评论回复
22
个百zz分点个|  楼主 | 2021-10-26 23:38 | 只看该作者
四. 遇到的问题


/******************************************************************************************/
就是这里!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

出现几个小问题,但是却是致命的问题!!!!!!!!!!!!!!!!!!!

/******************************************************************************************/

使用特权

评论回复
23
个百zz分点个|  楼主 | 2021-10-26 23:39 | 只看该作者
4.1 第一配置GPIO_Speed:
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //配置GPIO_Speed为50MHz

使用特权

评论回复
24
个百zz分点个|  楼主 | 2021-10-26 23:40 | 只看该作者
如果配置GPIO时,省略这一步,会导致CAN口发送不出数据,工控板的配置是放在LED 的GPIO配置中,一开始忽略了这一点,之后用排除法试出来的;

使用特权

评论回复
25
个百zz分点个|  楼主 | 2021-10-26 23:40 | 只看该作者
4.2 第二配置复用功能和映射与否:

使用特权

评论回复
26
个百zz分点个|  楼主 | 2021-10-26 23:41 | 只看该作者
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //复用功能时钟使能

使用特权

评论回复
27
个百zz分点个|  楼主 | 2021-10-26 23:42 | 只看该作者
//GPIO_PinRemapConfig(GPIO_Remap1_CAN1 , ENABLE); //重映射I/O CAN使能

使用特权

评论回复
28
个百zz分点个|  楼主 | 2021-10-26 23:42 | 只看该作者
上面两个被注释掉了,是由于:
用PA11和PA12 用的是CAN的默认端口,而用PB8和PB9是用CAN的复用功能重映射端口。

使用特权

评论回复
29
个百zz分点个|  楼主 | 2021-10-26 23:43 | 只看该作者

使用特权

评论回复
30
个百zz分点个|  楼主 | 2021-10-26 23:44 | 只看该作者
具体:

默认模式

   /* Configure CAN pin: RX */



  

GPIO

_InitStructure.GPIO_Pin = GPIO_Pin_11;



   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;



   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;



   GPIO_Init(GPIOA, &GPIO_InitStructure);



  



   /* Configure CAN pin: TX */



   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;



   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;



   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;



   GPIO_Init(GPIOA, &GPIO_InitStructure);

使用特权

评论回复
31
个百zz分点个|  楼主 | 2021-10-26 23:44 | 只看该作者
重定义地址1模式

/* Configure CAN pin: RX */



   //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;



   //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;



   //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;



   //GPIO_Init(GPIOB, &GPIO_InitStructure);



   /* Configure CAN pin: TX */  



   //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;



   //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;



   //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;



   //GPIO_Init(GPIOB, &GPIO_InitStructure);



   /* Configure CAN Remap   重影射 */



   //GPIO_PinRemapConfig(GPIO_Remap1_CAN, ENABLE);

使用特权

评论回复
32
个百zz分点个|  楼主 | 2021-10-26 23:45 | 只看该作者
重定义地址2模式

   /* Configure CAN pin: RX */



   //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;



   //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;



   //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;



   //GPIO_Init(GPIOD, &GPIO_InitStructure);



  



   /* Configure CAN pin: TX */



   //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;



   //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;



   //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;



   //GPIO_Init(GPIOD, &GPIO_InitStructure);



  



   /* Configure CAN Remap   重影射 */



   //GPIO_PinRemapConfig(GPIO_Remap2_CAN, ENABLE);

使用特权

评论回复
33
个百zz分点个|  楼主 | 2021-10-26 23:45 | 只看该作者
设置完 CAN 的引脚之后还需要打开 CAN 的时钟:

/* CAN Periph clock enable */



   RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);

使用特权

评论回复
34
个百zz分点个|  楼主 | 2021-10-26 23:46 | 只看该作者
4.3 第三CAN硬件部分:


一开始对CAN硬件部分没有过多的了解,后面经过一系列的试验,发现:

使用特权

评论回复
35
个百zz分点个|  楼主 | 2021-10-26 23:47 | 只看该作者
1. 如果STM32 CAN TX和RX没有和CAN收发器连接的情况下,STM32的CAN TX和RX是没用数据发出的;

使用特权

评论回复
36
个百zz分点个|  楼主 | 2021-10-26 23:47 | 只看该作者
2. STM32 CAN TX和RX必须要与CAN收发器的TX和RX对应,即TX接TX,RX接RX,否则CAN没有数据发出,说明:之所以说这个问题,不知道你们有没有注意到,我的自设板CAN收发器TX和RX是反接的;

使用特权

评论回复
37
个百zz分点个|  楼主 | 2021-10-26 23:48 | 只看该作者
3. STM32F103C8T6-LQFP48 的CAN口和USB口复用,即用CAN口是需要将USB口断开,防止有所影响;

使用特权

评论回复
38
个百zz分点个|  楼主 | 2021-10-26 23:48 | 只看该作者
4. 是我本身设备问题,我的自设板用的12V电源是我自己焊接的,不太可靠,电源12V时有时无的,所以最好烧写程序的时候点亮一个LED灯,可以显示板子的工作状态;

使用特权

评论回复
39
个百zz分点个|  楼主 | 2021-10-26 23:49 | 只看该作者
5. 工控板上CAN收发器是用TJA1050 是5V供电的,自设板用SN65HVD234 3.3-V CAN Bus Transceivers,之前有所顾虑,怕CAN收发器不一样会导致其它后果,之后发现没有问题。

使用特权

评论回复
40
个百zz分点个|  楼主 | 2021-10-26 23:49 | 只看该作者
以上一点心得,走了很多弯路。。。记录点滴,以此自励。

使用特权

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

本版积分规则