【CAN卡通信的下位机-STM32cubeIDE-hal库+STMF4xx+数据发送和接收+中断接收方式+基础样例(2)】

【CAN卡通信的下位机-STM32cubeIDE-hal库+STMF4xx+数据发送和接收+中断接收方式+基础样例2】

  • 1、概述
  • 2、实验环境
  • 3.1 问题描述
  • 3.2 问题已解
  • 4、自我尝试与努力
      • (1)在网上查照相关配置文章,进行配置对比。
      • (2)对比st的官方样例例程。
      • (3)请教大佬,帮忙查看代码和调试。
      • (4)总之,在STM32F1上能想的就都想过了。
  • 5、后期自己学习提升-暂时定因
      • (1)union联合
      • (2)平时可能会遇到 “classic CAN” ,”SLcan“,”BXCAN“和”FDCAN“,所代表的含义
      • (3)通过调试的方式,可以知道代码一步一步执行到哪里
      • (4)如果怀疑使用的hal库有问题,可以注释掉其它函数,只调hal库,来分析问题。
  • 6、实验说明
  • 7、实验过程-STM32F4-中断实验
      • (1)新建工程,基础配置。
      • (2)配置can前,先配置系统时钟。
      • (3)加入代码段-发送部分-共四步。
          • (1)printf打印串口
          • (2)讲发送函数进行封装成一个函数
          • (3)can启动函数-start函数
          • (4)调用发送函数-发送
      • (4)加入代码段-接收部分。
          • (1)加入筛选器函数和中断初始化
          • (2)回调函数加入接收函数-收到指定数组
          • (3)main的while循环运行,并打印信息。
  • 7、代码连接
  • 8、细节部分
  • 9、总结

)

1、概述

本次实验我们继续上一篇,进行can下位机相关实验,我一直在尝试使用STM32F1xx进行can的中断接收,但是一直未能成功,但是在STM32F4xx就成功了,这就很奇怪,多次尝试,一直也没能成功,看起来是hal库有问题,具体问题我会在下面说,这里也会说在STM32F4上成功的样例

2、实验环境

本次实验环境实是在两个环境下,如下,请根据自己的环境选择对应开发板。

(1)软件环境:STM32cubeIDE 1.8.0
(2)硬件芯片:STM32F103VET6(野火:指南者)
(3)硬件芯片:STM32F407ZET6(正点原子:探索者)
(4)其它硬件:j-link or st-link , 串口转usb转换器,can卡,开发板。
(5)特殊硬件:STM32F103VET6(野火:指南者)这款开发板,是没有can转换芯片的,所以我们自己需要弄一个,而STM32F407ZET6(正点原子:探索者)这款,是有的,可以不用外接,如下需要买的话,可以参照正点原子F4的can芯片SIT1050T,或者某宝淘一个类似的。
在这里插入图片描述

下图所示硬件截图在这里插入图片描述

3.1 问题描述

最近开始调试时候,按照网上相关文章,配置STM32F1xx的can,并且加入相关代码后,发现无论如何就是不运行,后来使用STM32F4xx配置can,发现可以运行,F4类似的方式,去配置F1的can,还是收不到任何东西,后来在回调函数加入串口打印,发现死在了can中断里,如下图所示。

目前问题是:在hal库,软件STM32cubeIDE下,STM32F1的can无法出中断,也无法获得数据
在这里插入图片描述

3.2 问题已解

https://blog.csdn.net/qq_22146161/article/details/131234569?spm=1001.2014.3001.5501

4、自我尝试与努力

(1)在网上查照相关配置文章,进行配置对比。

在网上找了很多文章,进行配置的对比,从开始不熟悉配置,现在基本能背下来了,配置差不多大同小异,均在初始化MX_CAN_Init();这个初始化函数内,都调试过,均无法在STM32F1上,成功收到数据。

(2)对比st的官方样例例程。

如下图,如果你是默认安装路径的话,那么在如下路径,能够找到官方的样例,对比样例后,我发现配置也没有什么不同,改成和官方一样,也无法解决,STM32F1上,中断接收,说啥就是不好使。
在这里插入图片描述
后来想着不用IDE软件也行,用KEIL软件,最后能实现can中断接收,也可以接受,结果加了串口代码,各种报错,有点头大,所以就没继续弄。

(3)请教大佬,帮忙查看代码和调试。

工作的原因,有机会请教大佬,甚至请教原厂的人,ST原厂回复说,查找对比官方样例,让进行对比。
(1)在大佬协助下吧,进行在线仿真调试,发现死在can中断内,如果请中断标志位,确实能出去,但是数据无法接收到。
在这里插入图片描述
(2)后来有改写hal库下的HAL_CAN_Init(&hcan);内部内容,让其判定通过,发现确实收到数据了,但是数据不对。
如下图,函数所在位置。
在这里插入图片描述
如下代码截图,将HAL_CAN_Init(&hcan)内代码复制过来,进入函数后,我们能学习到很多东西
(1)在开始的时候,函数做了很多赋值,来读取标志什么的。
在这里插入图片描述

(2)中间要进入哪里,其实是做判定,那个判定对了就进哪个。
在这里插入图片描述

(3)如下截图,我们也能知道,为啥进的是这个HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan);//中断接收回调函数,一步步执行的话,你会发现判定最终会进入这里,这样我们重写这个回调函数,在这个回调函数取数据才有意义。

在这里插入图片描述

(4)总之,在STM32F1上能想的就都想过了。

5、后期自己学习提升-暂时定因

在上一篇中,我们说到有些东西需要自己了解的,作为嵌入式工程师或者电子相关专业学习者,这些日常积累,是必不可少的,这里填补上这些坑,另外就是最近chatGPT也火了一阵,这个作为了解知识的工具还是挺好用的。

  1. 在看他人代码过程中,发现了一种叫union,联合体的东西,也是需要提升的,很值得学习。
  2. 通过调试的方式,可以知道代码一步一步执行到哪里,我也很久不这么调试了。
  3. 如果怀疑使用的hal库有问题,可以注释掉其它函数,只调hal库,来分析问题。
  4. 平时可能会遇到 “classic CAN” ,”SLcan“,”BXCAN“和”FDCAN“,所代表的含义。

(1)union联合

以下来自GPT的解答,自己之前也查过一些资料,觉得讲的还可以。
在这里插入图片描述在这里插入图片描述

(2)平时可能会遇到 “classic CAN” ,”SLcan“,”BXCAN“和”FDCAN“,所代表的含义

对此,我也直接询问ChatGPT,它可以快速帮助我们了解一些概念。

在这里插入图片描述

(3)通过调试的方式,可以知道代码一步一步执行到哪里

有段时间没这样调试了,快忘记了,不过这样的好处是,可以知道代码运行到哪里了,记得之前调试灯带时候,通过一步步调试,知道当时使用的hal库缺少部分代码。
本次也是通过一步一步执行,才知道在STM32F1的can上,不断在死循环在can中断函数里。

(4)如果怀疑使用的hal库有问题,可以注释掉其它函数,只调hal库,来分析问题。

后续通过定义一个变量,来接收反馈hal的返回值,可以辅助帮忙定位问题,另外一方面,尝试直接让接收判定通过,看看收到的数据,来判定是否正确。
在这里插入图片描述
后来才知道是HAL_ERROR错误。
但如何查,还是有点一头雾水,暂时定位hal出现问题的,因为跟进大佬所说,STM32F103这款,也用了多少年了,出问题早发现了

6、实验说明

如下图,我们本次实验,主要是测试can通信,但是can没通之前,我们其实不知道单片机是否跑起来了,所有我们需要uart3通过串口打印一些信息,这样我们就能知道单片机跑没跑起来。
以下出自本人灵魂画手,帮助你了解本实验。
在这里插入图片描述

7、实验过程-STM32F4-中断实验

这里只有F4例子,实在没看懂,直接去拿代码对比。

(1)新建工程,基础配置。

(1)配置RCC
在这里插入图片描述

(2)配置SYS
在这里插入图片描述

(3)配置uart1,在STM32F1配置是uart3,在STM32F4配置uart1,这点只是打印口不同,全部默认。
在这里插入图片描述

(2)配置can前,先配置系统时钟。

我们最终是通过APB1总线分频来的,那么需要先配置时钟,如下图。

在这里插入图片描述
这里配置后好,回去配置can相关设置。
在这里插入图片描述
因为用到了中断,这里别忘记配置中断。
在这里插入图片描述
另外之前调试F1时,有说,要选择以下选项的,但是我这边成功了,可以看到没有有勾选。
在这里插入图片描述

之后就是保存,生成代码就可以了
在这里插入图片描述

(3)加入代码段-发送部分-共四步。

(1)printf打印串口

之前文章:# 关于软件stm32cubeIDE下配置printf重定向无法输出问题-解决方式之一
有具体写如果加入printf,这里就不细说了,直接上截图。
1、需要加入的库和定义
在这里插入图片描述

2、打印信息部分
在这里插入图片描述

(2)讲发送函数进行封装成一个函数

在这里插入图片描述

(3)can启动函数-start函数

在这里插入图片描述

(4)调用发送函数-发送

在这里插入图片描述

(4)加入代码段-接收部分。

(1)加入筛选器函数和中断初始化

在这里插入图片描述

(2)回调函数加入接收函数-收到指定数组

在这里插入图片描述

(3)main的while循环运行,并打印信息。

在这里插入图片描述

7、代码连接

F1未成功代码链接:
https://download.csdn.net/download/qq_22146161/87798132
以下为实验截图:
在这里插入图片描述

F4成功代码链接:https://download.csdn.net/download/qq_22146161/87798146
实验结果截图:
在这里插入图片描述

8、细节部分

(1)中断接收,是不需要匹配ID,如实验结果,自己想输入什么就输入什么ID
在这里插入图片描述

(2)因为要连接的器件比较多,极有可能,串口发现没数据了,can收不到数据了,这些情况,建议多检查硬件连接,我在实验过程中,还出现硬件连接断联情况,这点还是要注意的。

另外就是注意软件上,要点接收,自己有次忘记点这个接收了,查了半天硬件。
在这里插入图片描述

(3)在STM32F1和STM32F4下,生成代码结构体,命名不太一样。
如下图,在F4中,命名为hcan1,因为还有个hcan2,而F1中,只有hcan这样一个。
在这里插入图片描述
(4)在写这篇文章时看到F4在这个文件下,有这样两行代码,想着是不是F1里没有,
在这里插入图片描述
于是在F1下进行尝试,如下图,发现还是不行。

在这里插入图片描述
(5)根据大佬指导,尝试如下图地方,进行勾选的,最后也尝试了,没有成功。
在这里插入图片描述
(6)我用网上工具对比了F1和F4中断函数,完全一致。
在这里插入图片描述
F1和F4除了进入函数名不一样外,但这不是影响因素。在这里插入图片描述
(7)根据大佬给到资料,发现F1内部有can1和can2,这个应该是一主一从,不是F4的两个can
在这里插入图片描述

(8)上传的F4代码编译后,会报错。
这块确实不小心多打了一个字母,已经更正,如还是会报错,那么自己手打改下吧,如果没报错,就是我已经更新了代码。
在这里插入图片描述

9、总结

我尽我所能,尝试所有可能,如今也能调通,我虽然失败了,但是这样情况,应该不是自己能力问题,而没想到。
不过确实没显得F1竟然调不通,这块后续再说吧,F4毕竟通了。

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

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

相关文章

使用langchain及llama_index实现基于文档(长文本)的相似查询与询问

文章目录 1. 引言2. 简介3. 带关键字的查询方案4. 不带关键字的总结询问5. 实现代码 1. 引言 在调用ChatGPT接口时,我们常常受到4096个字符(token)的限制。这种限制对于处理长文本或者需要对文档进行相似查询和询问的场景来说是一个挑战。然…

老胡周刊QA微信机器人(基于ChatGPT)

背景 先做个介绍吧,老胡的信息周刊是我从2021-08-16创立的周刊,截止到目前(2023-05-29)将近两年时间,目前已经有92期周刊,中间基本没有断更过,一共发布资源统计如下: 🎯 项目 288🤖 …

利用qt实现机器人可视化界面,并在界面上控制机器人各个关节运动

本工程借助于clion配置的qt环境,同时依赖eigen tinyxml2等开源库,也借鉴了博客上一些文章,具体哪些忘记了,十分抱歉。本工程仅供参考。机械臂模型为史陶比尔官网的TX2-60L-HB。可以去那下载对应的stp文件。 最终图: 通…

宝塔教程AI创作系统搭建详细教程

一、前言 众所周知,宝塔Linux面板是提升运维效率的服务器管理软件,经过200多个版本的迭代,功能全,少出错且足够安全,已获得全球百万用户认可安装。 优势: 使用宝塔前: 手工输入命令安装各类软…

PyQt报错:界面显示不全,QLayout: Attempting to add QLayout ““ to MyDesiger “Form“, which already has a layout

文章目录 1. 问题和解决2. 原因分析 一个折磨半天没有头绪的问题: 界面显示不全,而且报错 QLayout: Attempting to add QLayout "" to MyDesiger "Form", which already has a layout 1. 问题和解决 在一次将无 layout 的主界面UI…

timeROC出图时显示不全

右侧被占用 原因:Rstudio右下方的plots窗口太小 解决方法:向上向左增大窗口 Time_ROC代码 ####timeROC#### setwd("C:\\Users\\86189\\Desktop\\Time_ROC") #R包 #install.packages("timeROC") #install.packages("survival…

解决软件弹出对话框界面,内容显示不全问题(以OptiBPM为例)

系统环境:win10企业版 软件:OptiBPM9.0 问题阐述:如图所示,在win7系统环境下,Input Plane对话框中Expressior、Offset、Position下方会有输入框可供用户输入,但是在win10系统中无法点击。 解决办法&#…

微信小程序——解决wx.showToast()消息提示框内容显示不全问题

使用wx.showToast()方法,如果提示内容超出小程序规定的限制,则会出现显示不全问题 看到这,解决办法: 第一种:修改提示内容,按其规定的长度去展示 第二种:将其 icon的属性值设置成 none即可

dialog显示不全,布局显示不全,下边框显示不全,只显示一半的BUG

有问题的代码 RelativeLayout layout;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);layout findViewById( R.id.content);layout.setLayoutParams(new RelativeLayout.LayoutPar…

QToolTip太长显示不全的问题

有的文件名字太长了,Qtooptip也无法显示长度,可以将该Qlabel中设置QToolTip的样式如下, 设置QToolTip的宽度和高度,以及字体大小,这样就可以显示了。 QToolTip { font-size:12px; width:1024; height:40; } 效果…

sns解决显示不全不清晰及保存不全问题

import matplotlib.pyplot as plt import pandas as pd import seaborn as snsplt.figure(figsize(15, 10))sns.heatmap(data,cmapReds,annotTrue,fmtd).get_figure().savefig("temp.png",dpi500,bbox_inches tight) # fmt显示完全,dpi显示清晰&#xff…

计量语言学软件Altmann-Fitter阿尔特曼拟合器的使用简介(更新中)

计量语言学软件Altmann-Fitter阿尔特曼拟合器的使用简介 1、Altmann-Fitter是什么1.1 简介1.2 获得地址 2、使用说明2.1 数据文件的格式2.2 读取数据2.3 拟合说明2.3.1 读取数据2.3.2 选择模式2.3.3 拟合 2.4 指标说明2.4.1 卡方检验2.4.2 P值-probability level 3、使用反馈3.…

3an推客CPC怎么设置?3an推客推广效果怎么样

营销是商家一个关键的宣传方式,合理的营销可以让店铺获得大量的总流量,增加销量。在众多推广方式中,3an推客营销推广一直受到热烈欢迎,3an推客图文教程:CPC按点击设置流程 3an推客图文教程:CPC设置流程 登录3an推客后…

软件测试报告模板

1 测试项目概述 1.1 项目概述 xxx小程序项目是基于C/S架构的电商类应用系统,xx小程序作为客户端主要提供线上用户快捷的购物体验。该项目主要针对客户端(微信小程序)的测试,包含主页、商品分类、购物车及个人中心模块构成。 1.2 编写目的 本测试报告…

经典的风控授信流程与增信策略

今天我们来聊一聊信贷风控中策略流程,相信这也是很多童鞋感兴趣的内容。 每家公司的风控流程肯定存在着多多少少的差异,本文我们介绍最经典的策略流程,大家可以根据自己公司的业务情况进行调整。 介绍信贷风控流程,首先要了解信贷…

30多份软件测试报告模板,如何写一份优秀测试报告模板流程

相信很多做软件测试的小伙伴在软件测试后期,都为软件测试报告总结花费了很多的精力,那么如何做好软件测试报告呢?一份优秀的测试报告又包含哪些内容呢? 测试报告的核心要素 一、测试结论 从测试工程师的专业角度分析&#xff0…

【码住收藏】软件测试报告模板范文来了——优秀测试报告模板流程

一、软件测试报告是什么? 软件测试报告就是当软件开发人员开发出软件之后,在上市前交由测试人员进行一系列测试,再由测试人员对过程和结果的进行记录分析的一份文档。也是测试团队的工作成果展现,通过详细的记录测试内容&#xf…

二代征信报告解读及信贷风控中的应用

今年一月中旬起,征信中心面向社会公众和金融机构提供二代格式信用报告查询服务,相比一代征信系统,二代征信系统又做了哪些升级?提供的信用报告又有哪些变化?相对于一代征信报告,大家更加急切地想知道二代征…

人行征信报告介绍(一)

对于银行的信贷业务风控来讲,最最核心的数据是人行征信。随着人行征信的升级换代,对借款客户各方面信息的反应也更加全面和高效,所以有必要单独介绍。 一、人行征信的发展 人行征信是一种信息共享机制。中国人民银行征信中心统一负责企业和…

营养改善计划操作流程

营养改善计划操作流程 说明一、登录二、勾选 说明 本教程适用于全国学生营养改善登录勾选 一、登录 登录的网页必须是学籍网 登录要用营养餐专用账号 二、勾选 在勾选的时候要注意学生数与实际在校是否一致,不一致要核对学籍里的学生信息(学生人数…