cubemx配置stm32f407VET6实现can通信

背景:
项目上需要把原先的TMC5160电机驱动器替换为购买的电机控制模块(该模块采用canopen通信)
移植canopen的前提是can通信正常,现在添加一下can通信(先用标准帧,250K bit/S的波特率测试)

原理图:
在这里插入图片描述

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

软件实现:
1.cubemx配置can通信
参考博客:https://blog.csdn.net/weixin_43362027/article/details/132716496
1)如何计算波特率?
在这里插入图片描述
2)中断

在这里插入图片描述
2.实际配置
can1的时钟在APB1上,APB1的时钟为84MHZ;
所以250k = (84/21)/8 = 4M/8
在这里插入图片描述
在这里插入图片描述
3.生成代码验证功能:
生成的代码不能直接用;
1)can_init要修改

void MX_CAN1_Init(void)
{/* USER CODE BEGIN CAN1_Init 0 *//* USER CODE END CAN1_Init 0 *//* USER CODE BEGIN CAN1_Init 1 *//* USER CODE END CAN1_Init 1 */hcan1.Instance = CAN1;hcan1.Init.Prescaler = 21;hcan1.Init.Mode = CAN_MODE_NORMAL;hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;hcan1.Init.TimeSeg1 = CAN_BS1_2TQ;hcan1.Init.TimeSeg2 = CAN_BS2_5TQ;hcan1.Init.TimeTriggeredMode = DISABLE;hcan1.Init.AutoBusOff = DISABLE;hcan1.Init.AutoWakeUp = DISABLE;hcan1.Init.AutoRetransmission = DISABLE;hcan1.Init.ReceiveFifoLocked = DISABLE;hcan1.Init.TransmitFifoPriority = DISABLE;if (HAL_CAN_Init(&hcan1) != HAL_OK){Error_Handler();}/* USER CODE BEGIN CAN1_Init 2 */CAN_FilterTypeDef sFilterConfig;sFilterConfig.FilterBank = 0;sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;sFilterConfig.FilterIdHigh = 0x0000;sFilterConfig.FilterIdLow = 0x0000;sFilterConfig.FilterMaskIdHigh = 0x0000;sFilterConfig.FilterMaskIdLow = 0x0000;sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;sFilterConfig.FilterActivation = CAN_FILTER_ENABLE;sFilterConfig.SlaveStartFilterBank = 14;if (HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig) != HAL_OK){/* Filter configuration Error */Error_Handler();}HAL_CAN_Start(&hcan1);HAL_CAN_ActivateNotification(&hcan1,CAN_IT_RX_FIFO0_MSG_PENDING);/* USER CODE END CAN1_Init 2 */}

``
区别在于要添加这个部分:
在这里插入图片描述
2)实现can发送,我增加了报错信息用于调试

uint32_t pTxMailbox;
CAN_TxHeaderTypeDef 	TxHeader= {.RTR = CAN_RTR_DATA,.IDE = CAN_ID_STD,.StdId = 1,.TransmitGlobalTime = DISABLE,.DLC = 8,
};

void CanSendData(uint32_t id,uint8_t *data)
{//HAL_OKint ret=0;TxHeader.StdId = id;TxHeader.ExtId = id;HAL_Delay(5);HAL_CAN_AddTxMessage(&hcan1,&TxHeader,data,&pTxMailbox);if(ret == HAL_OK)HAL_UART_Transmit(&huart2, "\r\ncan send HAL_OK\r\n", strlen("\r\ncan send HAL_OK\r\n"), 100);else if(ret ==HAL_ERROR)HAL_UART_Transmit(&huart2, "\r\ncan send HAL_ERROR\r\n", strlen("\r\ncan send HAL_ERROR\r\n"), 100);else if(ret ==HAL_BUSY)HAL_UART_Transmit(&huart2, "\r\ncan send HAL_BUSY\r\n", strlen("\r\ncan send HAL_BUSY\r\n"), 100);else if(ret ==HAL_TIMEOUT)HAL_UART_Transmit(&huart2, "\r\ncan send HAL_TIMEOUT\r\n", strlen("\r\ncan send HAL_TIMEOUT\r\n"), 100);}

3)实现can接收;我实现的业务逻辑是在can接收回调函数中串口打印接收到的can包

uint8_t User_CAN_RxData[10]=0;
uint32_t  User_CAN_Rx_ID = 0;
CAN_RxHeaderTypeDef   RxHeader;
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{if(hcan->Instance==CAN1){HAL_CAN_GetRxMessage(hcan,CAN_FILTER_FIFO0,&RxHeader,User_CAN_RxData);User_CAN_Rx_ID = RxHeader.StdId;User_CAN_RxData[8] = '\r';User_CAN_RxData[9] = '\n';HAL_UART_Transmit(&huart2, User_CAN_RxData, strlen(User_CAN_RxData), 100);memset(User_CAN_RxData,0,sizeof(User_CAN_RxData));}
}

验证结果:
发送正常;
接收还没测试;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/12809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

其它高阶数据结构②_图(概念+存储+遍历+最小生成树)

目录 1. 图的概念 2. 图的存储结构 2.1 邻接矩阵(后面算法所用) 2.2 邻接表 3. 图的遍历 3.1 BFS广度优先遍历 3.2 DFS深度优先遍历 4. 最小生成树 4.1 Kruskal算法 4.2 Prim算法 本篇完。 1. 图的概念 图是由顶点集合及顶点间的关系组成的一…

重磅!麒麟信安发布CentOS安全加固套件

CentOS Linux 7系统即将在6月30日停服,标志CentOS全部停止更新和维护。党政、金融、能源、通信、交通、公共服务等关键信息基础设施领域已经投运使用的CentOS系统将无法获取官方提供的漏洞修复补丁,此后,CentOS系统将面临巨大的安全风险与危害…

河南广电与LiblibAI签署战略合作协议

5月15日,河南广电科技与LiblibAI战略签约仪式在郑州中原福塔新闻发布厅隆重举行。双方将本着“共商、共享、共建、共赢”原则,基于全面、可持续的战略合作伙伴关系,发挥各自优势,共同聚焦生成式AI领域,围绕内容创作、商…

Java基础教程 - 7 面向对象-1

更好的阅读体验:点这里 ( www.doubibiji.com ) 更好的阅读体验:点这里 ( www.doubibiji.com ) 更好的阅读体验:点这里 ( www.doubibiji.com ) 7 面向对象 面向对象&am…

无人售货奶柜:掘金新零售蓝海,

无人售货奶柜:掘金新零售蓝海, 在日新月异的商业浪潮中,无人奶柜犹如一股清新的创业飓风,正以不可阻挡之势吸引着众多创业者的目光。这股新兴力量以其独到之处和庞大的市场蓝海,预示着一场关于健康、便捷消费方式的深…

【C#】DateTime类型数组含有null?并排序

代码 internal class Program{static void Main(string[] args){List<DateTime?> dateTimes new List<DateTime?> { null,DateTime.MinValue,DateTime.MaxValue};var temp new List<DateTime?> { };dateTimes.Sort();//dateTimes.Reverse();foreach (va…

石碑之谜:滚动机关

描述 在蒙德和璃月的边界地带&#xff0c;有一个被遗忘的神庙&#xff0c;里面有一个奇怪的机关&#xff1a;滚动石碑。小熊必须操作这个112的长方体石碑&#xff0c;使其通过不同的地面环境&#xff0c;最终放置到神秘的符号“O”上&#xff0c;以解开通往宝藏的大门。 石碑…

Edwards爱德华PHM3000培训PPT课件内容可见图片详情

Edwards爱德华PHM3000培训PPT课件内容可见图片详情

SDL系列(一)—— 小白入门

SDL &#xff08; Simple DirectMedia Layer &#xff09; 是一套开放源代码的 跨平台多媒体开发库 &#xff0c;使用 C 语 言写成。 SDL 提供了数种控制图像、声音、输出入的函数&#xff0c;让开发者只要用相同或是相似的 代码就可以开发出 跨多个平台&#xff08; Linu…

618有什么划算的数码产品?4款精选数码好物清单分享,赶紧码住!

随着618购物节慢慢开始&#xff0c;数码产品的大门已经向你敞开&#xff0c;等你来发现里面的各种乐趣。在这个购物的好时节&#xff0c;我们为你准备了一些很不错的数码东西&#xff0c;不管是喜欢新鲜科技的你&#xff0c;还是需要实用小工具的朋友们&#xff0c;这里都有可能…

安卓、iOS、iPad三端搞定,不再剧荒!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 之前给大家推荐过各种看剧姿势&#xff0c;但很多苹果、平板端的小伙伴还是存在更好的需求体验&#xff0c;今天给大家推荐这款可以在安卓、iOS和平板上都能安装使用&#xff0c;不再剧…

2024自学网络安全的三个必经阶段(含路线图)_网络安全自学路线

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入…

基于Django的图书管理系统

文章目录 前言一、页面展示1.登录2.前端页面3.后端页面 总结 前言 本网站调用Django编写了图书管理网站&#xff0c;可以在后端控制书籍&#xff0c;前端进行书籍预览 一、页面展示 1.登录 2.前端页面 3.后端页面 — ![在这里插入图片描述](https://img-blog.csdnimg.cn/dir…

低功耗音频编解码器CJC8990

由工采网代理的CJC8990是一款低功耗音频编解码器&#xff0c;拥有先进的功能并提供高质量音频&#xff0c;非常适合于便携式数字音频应用&#xff0c;支持多种音频数据格式&#xff0c;包括I2S, DSP模式。 产品介绍&#xff1a; 该芯片工作电压&#xff1a;1.5V&#xff5e;3…

甲方运营工具——安天威胁情报中心每日热点事件爬取

一、背景 本次是采用python爬取安天威胁情报中心的每日热点事件,进行甲方内部威胁情报同步的这样一个需求开发。 界面及内容: 二、逐步实现 2.1、分析请求页面的数据来源 通过请求页面我们看到安天对于第三方引用这些内容的真实性等是不予负责的;我们看到该页面的数据来源…

mysql 行转列 case when 和 聚合函数实现

一、原始数据## 二、行转列 第一步 SELECTCASE WHEN SUBSTRING( aaa.cost_code, 1, 3 ) 100 THEN aaa.budget_cost_budget ELSE 0 END b1,CASE WHEN SUBSTRING( aaa.cost_code, 1, 3 ) 300 THEN aaa.budget_cost_budget ELSE 0 END b2,CASE WHEN SUBSTRING( aaa.cost_cod…

Math.Round()函数说明

Math.Round()并不是严格意义上的是四舍五入函数。它默认的执行的是“银行家舍入”算法&#xff0c;即四舍六入五取偶。概括为&#xff1a;四舍六入五考虑、五后非零就进一&#xff0c;五后皆零看奇偶&#xff0c;五前为偶应舍去、五前为奇要进一。 当为5时&#xff0c;取离着最…

淘宝店铺运营爆流课:助你打造高流量店铺,实现销售持续增长(52节课)

课程目录 01【开店类型第1课】货架式店铺.mp4 02【开店类型第2课】短视频店铺.mp4 03【开店类型第3课】直播型店铺.mp4 04【店铺基础操作第1课】如何发布一个成功的宝贝.mp4 05【店铺基础操作第2课】商品SKU设置技巧及库存设置方法.mp4 06【标题】如何制作一个爆款标题.mp…

寄大件家具用什么物流便宜,寄沙发大件物流便宜

在现代生活中&#xff0c;搬家或重新布置家居时&#xff0c;沙发作为体积较大、价值较高的家具&#xff0c;选择一个经济实惠的物流服务至关重要。 1、对于近距离的运输&#xff0c;同城寄沙发可以找个车直接拉过去比较划算&#xff0c;省外的可以试试像我这样邮寄&#xff1b;…

手机怎么制作搞笑gif?来看看这一个方法

动态图片是现在网络中很流行的一种图片格式&#xff0c;可以把多个jpg、png格式静图变成一张gif格式的动图。在各大社交媒体中非常的受欢迎&#xff0c;用简单快速的方法传递信息。当我们想要通过手机制作gif动画的时候&#xff0c;要如何操作呢&#xff1f;这时候&#xff0c;…