news 2026/10/2 20:51:26

STM32F103C8T6 CAN 通讯

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32F103C8T6 CAN 通讯

1.硬件原理图

2.CAN初始化

void main_can(void) { //SystemInit(); //设置系统时钟为72M KeyInit(); //按键管脚初始化 //LED_GPIO_Config();//LED管脚初始化 CAN_GPIO_Config();//CAN管脚初始化 CAN_NVIC_Configuration(); //CAN中断初始化 CAN_INIT();//CA初始化N模块 // while(1) // { // GetKey(); //检测是否有按键按下 // // } }
/* CAN初始化 */ void CAN_INIT(void) { CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; CanTxMsg TxMessage; /* CAN register init */ CAN_DeInit(CAN1); //将外设CAN的全部寄存器重设为缺省值 CAN_StructInit(&CAN_InitStructure);//把CAN_InitStruct中的每一个参数按缺省值填入 /* CAN cell init */ CAN_InitStructure.CAN_TTCM=DISABLE;//没有使能时间触发模式 //CAN_InitStructure.CAN_ABOM=DISABLE;//没有使能自动离线管理 CAN_InitStructure.CAN_ABOM=ENABLE;//没有使能自动离线管理 CAN_InitStructure.CAN_AWUM=DISABLE;//没有使能自动唤醒模式 CAN_InitStructure.CAN_NART=DISABLE;//没有使能非自动重传模式 CAN_InitStructure.CAN_RFLM=DISABLE;//没有使能接收FIFO锁定模式 CAN_InitStructure.CAN_TXFP=DISABLE;//没有使能发送FIFO优先级 CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;//CAN设置为正常模式 CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; //重新同步跳跃宽度1个时间单位 // CAN_InitStructure.CAN_BS1=CAN_BS1_3tq; //时间段1为3个时间单位 // CAN_InitStructure.CAN_BS2=CAN_BS2_2tq; //时间段2为2个时间单位 // // CAN_InitStructure.CAN_Prescaler=60*4; //时间单位长度为60 // CAN_InitStructure.CAN_Prescaler=60*2; //时间单位长度为60 //50k CAN_InitStructure.CAN_BS1=11;//CAN_BS1_19tq; //时间段1为3个时间单位 CAN_InitStructure.CAN_BS2=CAN_BS2_2tq; //时间段2为2个时间单位 // CAN_InitStructure.CAN_Prescaler=60*4; //时间单位长度为60 CAN_InitStructure.CAN_Prescaler=120; //时间单位长度为60 //50k CAN_Init(CAN1,&CAN_InitStructure); //波特率为:72M/2/60(1+3+2)=0.1 即100K /* CAN filter init */ CAN_FilterInitStructure.CAN_FilterNumber=1;//指定过滤器为1 CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//指定过滤器为标识符屏蔽位模式 CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//过滤器位宽为32位 CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;// 过滤器标识符的高16位值 CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;// 过滤器标识符的低16位值 CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//过滤器屏蔽标识符的高16位值 CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;// 过滤器屏蔽标识符的低16位值 CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;// 设定了指向过滤器的FIFO为0 CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;// 使能过滤器 CAN_FilterInit(&CAN_FilterInitStructure);// 按上面的参数初始化过滤器 /* CAN FIFO0 message pending interrupt enable */ CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE); //使能FIFO0消息挂号中断 }

3.发送代码

/* 发送两个字节的数据*/ void can_tx3(u8 Data1,u8 Data2,u8 Data3) { CanTxMsg TxMessage; TxMessage.StdId=0x00; //标准标识符为0x00 TxMessage.ExtId=0x0000; //扩展标识符0x0000 TxMessage.IDE=CAN_ID_EXT;//使用标准标识符 TxMessage.RTR=CAN_RTR_DATA;//为数据帧 //!!!!!!!!!! TxMessage.DLC=8; // 消息的数据长度为2个字节 //!!!!!!! TxMessage.Data[0]=0xf2; //第一个字节数据 TxMessage.Data[1]=0xf2; //第二个字节数据 TxMessage.Data[2]=Data1; //第一个字节数据 TxMessage.Data[3]=Data2; //第二个字节数据 TxMessage.Data[4]=Data3; //第二个字节数据 TxMessage.Data[5]=0x00; //第二个字节数据 TxMessage.Data[6]=0x00; //第二个字节数据 TxMessage.Data[7]=0x00; //第二个字节数据 CAN_Transmit(CAN1,&TxMessage); //发送数据 }

4.测试

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 20:51:24

英语专业同学注意:2026年毕业论文去除AI痕迹的正确操作

用ChatGPT润色英文摘要、用豆包生成文献综述框架,几乎是2026年英语专业毕业生的日常。但越来越多的人发现:导师能"闻"出AI味,学校新上的AIGC检测更是直接给出数值。英文论文的AI痕迹比中文更明显——那种四平八稳、滴水不漏的行文&…

作者头像 李华
网站建设 2026/10/2 20:48:37

Android Studio配置本地Gradle全攻略:解决同步慢、下载卡顿

我猜你打开这篇文章,多半是遇到了和我之前一样的情况:新建第一个Android项目,结果卡在Gradle Sync大半天,进度条一动不动,下载速度堪比蜗牛,最后还可能抛出一串看不懂的英文报错。这个让无数新手怀疑人生的…

作者头像 李华
网站建设 2026/10/2 20:48:32

Visual C++原生读写XML:不装三方库用MSXML搞定解析与生成

简介:Visual C环境下使用纯原生C代码解析与读写XML文件的完整源代码工程,面向希望在Windows平台不依赖第三方库处理XML的开发者。工程涉及DOM解析、SAX事件驱动、节点遍历与属性获取、XML特殊字符转义、序列化输出和错误处理等关键环节,并提供…

作者头像 李华
网站建设 2026/10/2 20:47:50

青岛资质齐全的ai优化推广品牌企业推荐

行业常见的4大踩坑难题,你中招了吗? 做线上获客的企业老板,是不是经常遇到这些头疼的问题? 投了钱看不到效果:要么曝光量不少但没询盘,要么询盘质量差,打了一圈电话都是无效咨询,钱像打水漂一样看不懂平…

作者头像 李华
网站建设 2026/10/2 20:47:49

不锈钢格栅板G255/30/50 广东水沟盖板定做 防滑锯齿款 耐腐蚀抗压

不锈钢格栅板在广东市场为何持续升温近年来,随着广东地区市政排水改造、工业园区升级以及食品、制药、污水处理等行业的持续投入,不锈钢格栅板与水沟盖板的需求量明显上升。与传统的铸铁盖板、树脂复合盖板相比,不锈钢格栅板凭借耐腐蚀、承压…

作者头像 李华