总结一个月以来调试STM32底盘踩过的坑

2023-05-16

深坑1:基本配置方法;

配置PWM输出,TIM4有四路PWM输出,依葫芦画瓢开始配置,配置完后,开始测试,啥都没有啊,很是伤心,开始查手册,发现也没问题啊。然后又开始求助师傅了,师傅说你开I/O时钟了吗?。。。。。。。。。。。。然后秒解决。

深坑2:基本调试方法;

基本的调试方法,就是printf函数测试逻辑是否正确啦,但是printf是很费时间的,程序会跑飞的。然后就摒弃了这个调试的方法。然后就不知道该如何调试程序逻辑了、然后某一天师傅说你为什么不用printf输出来看你的逻辑是否有问题呢?我说会跑飞啊,然后师傅把定时器时间调到10倍,说好了。。。。。。。。。这也是为什么这么多年多多少做过一些编程,但是一直不精通的原因了,往往是找个视频教程看看,就没在认真仔细的写过代码,这么多坑自己不去跳,不去爬,怎么可能把行程能力呢。

深坑3:硬件基础;

这个基础能力就是你一定要去看硬件手册,stm32中的复用功能可谓博大精深,要死记硬背功能不可能的,所以只能学会方法,用时去查啊。

深坑4:解决问题的方法;


任何编程的问题最后归结为数学和解决问题的思路,某位大牛说的,踩了这么多坑后深深觉得是多么痛的领悟。在掌握了一些基本的思路以后,还是遇到了很多问题,往往遇到问题后就不知道该如何分析。

问题1:一个往复运动的机构,在程序写完后,只能往一个方向运动。

然后我的解决问题的思路——用printf函数在每一个条件语句里放一个printf语句检测是否进入了条件,其中angle_rotation1为绝对值编码器的反馈参数。转动编码器的过程中发现随着反馈值的变化依次进入了三个条件语句,输出的结果是“”正转“、“”停止、“”正转“、“”停止、“”正转“、“”停止、“”“停止”、“”“停止”、“”“停止”、“反转””、“”“停止”这样循环,感觉没有什么问题。能正常进入循环,然后就开始纠结了,都能进循环啊,怎么会没有输出呢,就开始测试I/O口是否没有输出,万用表测完后,真的没有输出额,好开心,然后开始怀疑I/O口坏了,换I/O还是没反应,把能进入的循环里的I/O都置1发现都有输出。这个时候还是没有理睬他继续测试,换驱动器等,然后觉得哪里有问题了,但是我应该是解决不了了,就开始求救师傅。师傅说看看效果,从头开始测逻辑,师傅一看输出,不对啊,你这个怎么一直都输出停止啊?

 if((Forward_Cmd_Pos -  angle_rotation1)>pos_err )
{
GPIO_ResetBits(GPIOD,GPIO_Pin_13);   //forward;
    GPIO_SetBits(GPIOD,GPIO_Pin_15);
  Forward_Cmd_Spd =4300;
// printf("正转:%d",1);
}
if(abs(Forward_Cmd_Pos- angle_rotation1)<pos_err)
{
GPIO_ResetBits(GPIOD,GPIO_Pin_15);   //forward;
   GPIO_ResetBits(GPIOD,GPIO_Pin_13);
 Forward_Cmd_Spd =0;
//printf("停止:%d",0);
 } 
  if(Forward_Cmd_Pos- angle_rotation1<(-pos_err)  &Forward_Cmd_Pos>270)
{
GPIO_SetBits(GPIOD,GPIO_Pin_13);    //inversion;
      GPIO_ResetBits(GPIOD,GPIO_Pin_15);
Forward_Cmd_Spd =4300;
// printf("反转:%d",2);
}

每进入这个正转就开始输出停止了。好吧,逻辑配置错误了,一进入正转就立马进入停止条件语句里,这样肯定就没有输出了啊,我滴个乖乖,没有输出不一定是I/O坏了还有可能就是程序没有输出啊。这个问题其实我已经把问题的数据输出了,但是在分析的过程中输给了思维定势。获取数据的方式可以人教,但是分析问题的能力不是能手把手教的,要靠自己积累啊。


然后另一个问题是,在驱动器上电后摇摆机构需要先转一圈,然后才能按照设计的程序正常来回运转。这个问题一开始也觉得是无解的,认为是主控程序中的PID来不及把速度拉下来(10ms一个控制周期)。好吧,又把我的小师傅叫了过来,小师傅首先就把控制驱动器的信号给拔了,驱动器带着电机疯狂的转,好吧这个现象其实一开始一直都在,每次烧程序时电机都会疯转,没仔细想这个问题是为什么,觉得他就是个自然而然的问题。然后小师傅说肯定是程序设计有问题、或者驱动器设置有问题,那要是我的其他底盘上电都疯转还不到处撞啊。我去,这么浅显的道理,我竟然认为他是个自然而然的问题。检查了一遍感觉没什么设置错误啊,然后打了个电话给客服,说明问题后,客服妹妹说是因为驱动有个上电自动找零功能,可以去掉这个上电自动找零功能,因为系统中没有接入限位开关找不到零位就疯狂转呗。

解决问题首先要学会分析问题的本质,任何一个现象背后一定是有深层原因支撑的,而拨开这一层一层的云雾去看到本质就不容易啊。这也是为什么有那么多人想学编程,往往知难而退的原因。看不见的原因拦到了很多入门的人。


先写下这几个类再来补全。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

总结一个月以来调试STM32底盘踩过的坑 的相关文章

  • 程序员生涯之生活篇

    作为一名非正规的程序员菜鸟 xff0c 我没有什么职场沉淀 xff0c 也没有开阔的视野 xff0c 只是读了几篇博文与时讯 xff0c 有所感触 xff0c 想要记录一下自己的想法与体会 xff0c 暂定为程序员生涯之生活篇 首先介绍一下
  • 大数据领域的Benchmark介绍

    一 Benchmark简介 Benchmark是一个评价方式 xff0c 在整个计算机领域有着长期的应用 正如维基百科上的解释 As computer architecture advanced it became more difficu
  • 关于ROS包中CMakeList.txt中几个常用的命令的作用 ——————(一)

    目录 xff08 1 xff09 find package catkin REQUIRED COMPONENTS 2 include directories 3 add executable src1 src2 xff08 简易写法 xff
  • 【Kubernetes系列】K8s更新镜像的几种方法

    目录 一 准备二 更新镜像1 方法一 xff1a 修改 yaml 文件版本号并执行2 方法二 xff1a 使用 set image3 方法三 xff1a 使用 patch 一 准备 以下以前端的服务为例 xff0c 前端 yaml 文件内容
  • Java中toString的使用

    在java中 xff0c 所有对象都有toString 这个方法 xff0c 因为它是Object里面已经有了的方法 xff0c 而所有类都是继承Object xff0c 所以 所有对象都有这个方法 它通常只是为了方便输出 xff0c 比如
  • Linux安装时至少划分哪两个分区才能正常安装使用

    根 xff08 boot xff09 分区和SWAP分区
  • C#界面动态布局 界面控件随着界面大小尺寸变化而变化

    要想写一个漂亮的界面 xff0c 光靠利用Anchor和Dock属性是远远不够的 xff0c 我们需要用到相对布局 xff0c 就是不管窗口大小怎么变化 xff0c 控件相对父控件的相对位置保持不变 可惜c 里没有提供按照百分比布局 所以只
  • 一个简单的Dockerfile

    一个简单的Dockerfile xff0c 如下 xff1a FROM golang span class token comment 基础镜像 span COPY print num go root span class token co
  • c++ 构造函数后面加冒号

    有四种情况下应该使用初始化表达式来初始化成员 xff1a 1 xff1a 初始化const成员 常量必须在构造函数的初始化列表中初始 xff0c 或将其设为static Wrong Class A const int size 61 0 R
  • PX4程序编译过程解析

    第一章 PX4程序编译过程解析 PX4是一款软硬件开源的项目 xff0c 目的在于学习和研究 其中也有比较好的编程习惯 xff0c 大家不妨可以学习一下国外牛人的编程习惯 这个项目是苏黎世联邦理工大学的一个实验室搞出来的 该方案是基于NUT
  • Git使用之——冲突解决一(git merge conflict)

    Git冲突是在多用户协同工作下出现 xff0c 在一些情况下Git可以智能自动合并 xff0c 但有时需要用户手动合并 xff08 本文链接 xff1a http blog csdn net u012150179 article detai
  • git fetch 的简单用法:更新远程代码到本地仓库

    Git中从远程的分支获取最新的版本到本地方式如下 xff0c 如何更新下载到代码到本地 xff0c 请参阅ice的博客基于Github参与eoe的开源项目指南 方式一 1 查看远程仓库 1 2 3 4 5 6 git remote v eo
  • 各类数值型数据间如何混合运算?

    整型 包括int xff0c short xff0c long 实型 包括float xff0c double 可以混合运算 前已述及 xff0c 字符型数据可以与整型通用 xff0c 因此 xff0c 整型 实型 字符型数据间可以混合运算
  • 整型与字符型相加

    想通过整型与字符型相加的到正确的整型数值 xff0c xff0c 见下面的程序 xff1a include lt stdio h gt void main int a 61 2 char c 61 39 3 39 int b 61 a 43
  • Scrapy研究探索(五)——自动多网页爬取(抓取某人博客所有文章)

    首先 xff0c 在教程 xff08 二 xff09 xff08 http blog csdn net u012150179 article details 32911511 xff09 中 xff0c 研究的是爬取单个网页的方法 在教程
  • Scrapy研究探索(六)——自动爬取网页之II(CrawlSpider)

    原创 xff0c 转载注明 xff1a http blog csdn net u012150179 article details 34913315 一 目的 在教程 xff08 二 xff09 xff08 http blog csdn n
  • reStructuredText

    此文章转自 xff1a http wstudio web fc2 com others restructuredtext html 还有一篇中文教程也可以 xff1a http jwch sdut edu cn book rst html
  • 智能指针tr1::shared_ptr、boost::shared_ptr使用

    对于tr1 shared ptr在安装vs同时会自带安装 xff0c 但是版本较低的不存在 而boost作为tr1的实现品 xff0c 包含 Algorithms Broken Compiler Workarounds Concurrent
  • 关于CSDN几点用户体验较差的功能(收藏夹和草稿箱)

    1 收藏夹不去重 同一专栏或博客每点一次 收藏 都会增加到收藏夹中 收藏内容一般有两种形式 xff1a xff08 1 xff09 专栏收藏 xff08 2 xff09 博客文章收藏 对于前者 xff0c 虽然专栏的文章数量可能是不断在增加
  • 关于提高效率的几点

    有些时候感觉一直没闲着却没看见多少成果 突然看见这篇文章 xff08 http www cppfans org 1644 html xff09 xff0c 虽然不能全部认同 xff0c 但是的确有些部分还是值得思考的 以下为转载 xff1a

随机推荐

  • PX4应用examples[1]:px4_simple_app解析与自己的功能模块构建

    PX4应用examples 1 px4 simple app解析与自己的应用构建 px4 simple app源代码学习代码分析第一部分 PX4简单打印消息的发布第二部分 传感器信息的获取关于sensor combined的介绍 xff1a
  • 已将GitHub scrapy-redis库升级,使其兼容最新版本Scrapy

    1 代码升级 之前的问题 xff1a 随着Scrapy库的流行 xff0c scrapy redis作为使用redis支持分布式爬取的工具 xff0c 也不断的被大家发现 但是 xff0c 使用过程中你会发现的问题是由于scrapy red
  • CMake应用:交叉编译

    交叉编译指的在一个平台上生成另一个平台上的可执行代码 很多时候 xff0c 开发的代码可能并不只是在开发主机的平台上执行 xff0c 比如在Windows下开发的程序 xff0c 希望能够在Linux 或者MacOS下执行 xff1b 或者
  • 手把手教你在Github上建立自己的个人博客网站

    概述 之前闲着没事 就利用Github建了一个个人博客网站 效果还不错 今天就来分享一下 建立自己个人博客网站的好处 1 面试装逼 这个不必多说 2 把平时积累的知识和项目记录下来 方便日后查看使用 3 不受其他博客平台的限制 准备工作 开
  • Realsense D435保存图像

    你可以走慢一点 xff0c 但脚步不能停下来 Realsense是我使用的第3款深度传感器 xff0c 前两款分别是Orbbec和Kinect v2 xff0c 奥比中光的深度传感器只需要USB接口 xff0c 但深度图的效果并不好 xff
  • Realsense T265简单测试

    为啥才是周三 xff01 xff01 软硬件配置 CPU xff1a Intel Core i7 7820HQ CPU 64 2 90GHz 8 内存 xff1a 16G 系统版本 xff1a Ubuntu16 04 LTS 64位 深度传
  • 生成随机数方法总结

    使用srand time NULL 或srand time 0 设置当前的系统时间值为随机数种子 xff0c 需要在头文件处使用 include lt cstdlib gt 和 include lt ctime gt 要取得 a b 的随机
  • 尚硅谷_JavaScript_学习笔记

    JavaScript简介 JavaScript 简介 xff1a JavaScript 是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言 xff0c 是一种动态 弱类型 基于原型的语言 xff0c 内置支持类 它的解释器被称为 Ja
  • SQL语句拼接常加 where 1=1 的原因

    数据库在进行查询的时候 xff0c 经常看到有的人使用where 1 61 1和1 61 0 1 61 2等的查询 xff0c 这种条件在执行前 xff0c 就会被计算出true 或者false xff0c 1 61 2实际解释为 NULL
  • 如何完全屏蔽Chrome的提示:"请停用以开发者模式运行的扩展程序"

    参考链接 xff1a chrome怎么安装非官方市场的插件 xff1f https www zhihu com question 24027794 屏蔽Google Chrome安装第三方插件之后反复提示 请停用以开发者模式运行的扩展程序
  • Win7中出错:无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-|1-1-0.dll

    安装完 Python 后 xff0c 配置好 Python 目录于 Path xff0c 然后 CMD 命令下输入 python 验证是否配置成功 xff0c 但是竟然出现结果跳出对话框 xff0c 出错 xff1a 无法启动此程序 xff
  • rviz global status显示为error的问题解决

    rviz global status显示为error的问题解决 运行ros官方教程中程序rosrun rviz rviz d rospack find turtle tf rviz turtle rviz rviz 发现出现的结果 xff0
  • Chrome浏览器各个版本区别及离线安装包下载

    chrome现在分为 Stable Beta Dev Canary xff08 金丝雀 xff09 Chromium 五个版本 这五个版本的不同在于功能 稳定性 更新速度等方面 Chromium的更新速度很快 xff0c 每隔数小时即有新的
  • 【总结】浏览器 User-Agent 大全

    一 基础知识 Http Header之User Agent User Agent中文名为用户代理 xff0c 是Http协议中的一部分 xff0c 属于头域的组成部分 xff0c User Agent也简称UA 它是一个特殊字符串头 xff
  • Visual Studio 2017各版本安装包离线下载、安装全教程

    微软最近发布了正式版Visual Studio 2017并公开了其下载方式 xff0c 不过由于VS2017采用了新的模块化安装方案 xff0c 所以微软官方并未提供ISO镜像 xff0c 但是官方提供了如何进行离线下载的方案给需要进行离线
  • Python基础入门笔记(一)

    前言 xff08 认识Python xff09 既然学习 Python xff0c 那么至少得了解下这门语言 xff0c 知道 Python 代码执行过程吧 Python 的历史有兴趣的百度百科下就有 xff0c 这个不多说了 1 我们先来
  • Spring学习笔记1

    前言 Spring框架的学习路线 xff1a Spring第一天 xff1a Spring的IOC容器之XML的方式 xff0c Spring框架与Web项目整合Spring第二天 xff1a Spring的IOC容器之注解的方式 xff0
  • GitHub学生包的介绍与申请

    1 Github学生包介绍 1 Github学生包是什么 xff1f GitHub 学生包是一个由 GitHub 免费提供给学生的福利 xff0c 里面包括了计算机专业可能用到的很多付费资源 xff0c 其中包含一系列网站服务的打折 代金券
  • (二)GitHub的使用随记

    一 Git及GitHub的使用 1 突破GitHub单个大文件上传限制 GitHub 上新建的仓库容量大小限制在 1G xff0c 单个文件不能超过 100M xff0c 有 50M 的文件 xff0c 就会警告了 可通过以下命令查找超过
  • 总结一个月以来调试STM32底盘踩过的坑

    深坑1 xff1a 基本配置方法 xff1b 配置PWM输出 xff0c TIM4有四路PWM输出 xff0c 依葫芦画瓢开始配置 xff0c 配置完后 xff0c 开始测试 xff0c 啥都没有啊 xff0c 很是伤心 xff0c 开始查