【CAN】STM32新能源汽车CAN通信实现过程

【CAN】STM32新能源汽车CAN通信实现过程



前言

【电机控制】直流有刷电机、无刷电机汇总——持续更新
使用工具:
1.控制器——STM32F103C8T6
2.仿真器——STLINK
3.CAN模块——TAJ1050集成芯片
4.USB转CAN分析仪
5.瑞萨CAN入门书
6.上位机——CANLINtools
7.PICO7

【CAN】STM32新能源汽车CAN通信协议发送接收过程


在这里插入图片描述

提示:以下是本篇文章正文内容,下面案例可供参考

STM32F103C8T6芯片两个CAN口,PB8PB9和PA11PA12在CAN初始化配置中有不同需注意

一、软件

1.PA11、PA12口配置

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//ʹÄÜÍâÉèʱÖÓ
  RCC_APB1PeriphClockCmd( RCC_APB1Periph_CAN1 , ENABLE);
  /* ¸´Óù¦ÄܺÍGPIOB¶Ë¿ÚʱÖÓʹÄÜ*/	 
  //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);	                        											 
 
  //GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);

  /* Configure CAN pin: RX */	 // PB8
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;	 // ÉÏÀ­ÊäÈë
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  /* Configure CAN pin: TX */   // PB9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // ¸´ÓÃÍÆÍìÊä³ö
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//ʹÄÜCAN1ʱÖÓ	

2.PB8、PB9口配置

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//ʹÄÜÍâÉèʱÖÓ
	
  /* ¸´Óù¦ÄܺÍGPIOB¶Ë¿ÚʱÖÓʹÄÜ*/	 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);	                        											 
 
  GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);

  /* Configure CAN pin: RX */	 // PB8
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;	 // ÉÏÀ­ÊäÈë
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  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_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//ʹÄÜCAN1ʱÖÓ

二、接线图

在这里插入图片描述
请添加图片描述

三、硬件原理图

在这里插入图片描述

四、上位机

在这里插入图片描述
在这里插入图片描述

五、PICO示波器串行解码

1.软件中的CAN波特率设置-500K

72M/2/60(1+8+9)=0.5 ¼´500K

CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_Normal);//CAN³õʼ»¯Õý³£¹¤×÷ģʽ,²¨ÌØÂÊ500Kbps   

在这里插入图片描述

2.PIC设置

在这里插入图片描述

3.PIC串行解码

在这里插入图片描述

六、解析帧

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.Identifier (ID)、RTR——仲裁段

res=can_send_message(0x01,CAN_Id_Standard,8,&cycle_300ms_send_data[0]);	
u8 can_send_message(u32 id,u32 extend_flag,u8 len,u8* msg)
{	
	u8 mbox;
	u16 i=0;
	if(extend_flag==CAN_Id_Standard)	
	{
	TxMessage.StdId=id;			// ±ê×¼±êʶ·û 
	}
	else if(extend_flag==CAN_Id_Extended)
	{
	TxMessage.ExtId=id;			// ÍØÕ¹±êʶ·û
	}
	TxMessage.IDE=extend_flag;
	TxMessage.RTR=CAN_RTR_Data;		// Êý¾ÝÖ¡
	TxMessage.DLC=len;				// Òª·¢Ë͵ÄÊý¾Ý³¤¶È
	for(i=0;i<len;i++)
	TxMessage.Data[i]=msg[i];			          
	mbox= CAN_Transmit(CAN1, &TxMessage);   
	i=0; 
	while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;	//µÈ´ý·¢ËͽáÊø
	if(i>=0XFFF)return 1;
	return 0;	 
}

在这里插入图片描述

2.Data——数据段

 u8 cycle_300ms_send_data[8]={0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,0x00,0x11};

七.引用

示波器怎么测can总线的波形?
如何用Pico示波器进行CAN总线解码分析
STM32F103C8T6-CAN
【STM32】CAN通讯

总结

本文仅仅简单介绍了【CAN】STM32新能源汽车CAN通信实现过程,评论区欢迎讨论。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kisorge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值