【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通信实现过程,评论区欢迎讨论。