我依然坚持,任何一次自己的心有感触都要及时的记录下来,这样你的努力才是真正的努力。

  这两天一直在用STM32调试CDS5516舵机,其实很简单,但是却花了将近两天的时间,过程之曲折我就不说了,先总结一下怎么用32调试CDS5516舵机吧!

  首先,要明确,CDS5516舵机是一个可编程的数字舵机,要实现对他的控制,就要通过串口线,发一系列的指令包,通过应答来判断所发指令是否正确,由于是单线通信,所以必须要在发送完指令包之后立马转换为接收模式,采用STM32的话有两种方法,可以实现,1、将串口的TX和RX连接起来,通过使能发送使能和接收使能,来实现。2、利用单线的半双工模式通信,也就是只用TX线,在发送完之后,TX线被释放,可以接收(实际上就是内部将TX和RX线连接起来了)。(注意:在此进行单线测试的时候,若发送用的USART1那么接收中断不能再使用USART1的接收中断)

  以上只是准备工作,然后就可以连接舵机进行调试了,在调试的时候,我用的STM32的USART1的TX口,TX口必须加上3.3V,4.7K左右的上拉电阻,才能保证发出的数据包的正确。而舵机的工作电压范围是6.8-14V,我用了11.3V的电池对舵机进行供电,当你拿到一个CDS5516的舵机的时候,你可能并不知道该舵机的ID号是多少,那么你就可以采用广播发送的模式,将ID号设置为已知,具体设置方法手册中有详细说明,

  我在查阅资料的时候,见到有人问关于通信的波特率的问题,在默认情况下,CDS5516舵机的通信波特率应该是1MHZ,我也是试出来的,因为只有几个固定设置的比特率的值在设置后再掉电是不会消失的,而其他的掉电之后会消失,因此,在此推荐各位能试一试。在设置完ID号的时候,可以通过查看应答包来确定是否设置成功,该步骤很重要,因为如果这一步完成,那么你的调试基本可以算是完成了百分之99,,,所有的指令包,在手册里都能详细的查到,在此提醒一下各位,如果你是仿照手册中的某一个例子,改了ID号或者是其他的希望实现同样的功能,那么请你一定要记得修该最后的校验和该数值,楼主在一开始调试的时候,就没注意到这一点,照本宣科,结果浪费了很多时间。由于我对舵机的要求比较简单,只实现舵机能够按照我设定的角度进行旋转,因此没有在进行其他的测试,但是已经实现这些功能的话,其他的应该也是不成问题的。楼主使用的正点原子战舰的板子进行调试的,下面将两个主要的代码进行粘贴,供大家参考:

void Set_Num_1(void) //设置舵机的ID号为1
{
USART1->CR1 &= ~0x4;
USART1_Send_Char(0xFF);
USART1_Send_Char(0XFF);
USART1_Send_Char(0XFE);
USART1_Send_Char(0X04);
USART1_Send_Char(0X03);
USART1_Send_Char(0X03);
USART1_Send_Char(0X01);
USART1_Send_Char(0XF6);
USART1->CR1 |= 0x4;
delay_ms();
}
void Set_Num_Speed(u8 id,u32 arg)      //设置舵机旋转的目标角度
{
static u8 i = ;
u8 sum = 0x00;
uint8_t dat[] = {0xFF,0xFF,,,0x03,0x1E,,,0xFF}; //定义一个数据包
dat[] = id; //设置ID号
dat[] = (arg*0x3FF/)&0xFF; //设置目标角度的低字节
dat[] = (arg*0x3FF/)>>; //设置目标角度的高字节
for(i=;i<;i++)
{
sum+=dat[i]; //计算校验和
}
dat[] = ~sum; for(i=;i<;i++)
{
USART1_Send_Char(dat[i]); //将数据包发出
}
}

  以上两个函数基本算是舵机调试的主要函数了,希望能帮到各位。

*************************************************************

*************************************************************

*************************************************************

  这两天的调试,让我想了很多,这样一个并不是很难的调试却花费了我两天的时间,而且还是在小伙伴@xkwy的帮助下(在此感谢xkwy,希望以后的某一天他能看到)其中的原因确实值得我深思。

1、面对一个新的东西,不知道该从何下手。。。或许这也是我最大的一个问题了,对于这次的调试,手头的资料只有一份技术手册,在刚开始调试的时候,自己就已经打起了退堂鼓,以前也是这样。无论是从最开始的准备工作,还是在之后的调试中,面对一个问题,心里就心烦意乱,把大量的时间和精力都花在了抱怨和一次次徒劳无功的测试上,没有想问题的根本处在哪里。其实看别人,才会发现,别人也是在这样的情况下,对照着手册, 一点点的进行。这一点自己确实做得还很不到位。

2、第二个最大的问题,就是”懒!“,在调试的过程当中,首先准备工作就没有做好,连接收应答包的准备工作都没有做好,那么又何谈区解决问题呢?除此之外,对于可能出现问题的地方,总是嫌麻烦,然后将问题规避掉,直接测试,期待最后的正确的结果,现在想想,这样的概率是有多么的低啊,把可能出问题的部分全都规避掉,然后对于不正确的结果又无可奈何,最后,只能让自己越加烦躁,看来,自己的心急气躁也不是没有原因的。

3、对于手册,总是不能认真的看,无论是面对什么样的新的问题,自己最希望的就是能从网上直接找到例程,然后看别人怎么弄,照葫芦画瓢,在这样的心里下,往往最可能的就是忽略了身边最有用的参考资料-技术手册。在以后的道路上,会面对各种各样的新的器件,问题,不可能都从网上找到资料,那么这时候,如果自己没有这种从手册出发,解决问题的能力,无疑自己未来的发展也就这样了。

4、基本功不够扎实,作为一个以嵌入式开发为目标的开发者来说,对于芯片硬件的了解太少了,甚至连最基本的底层程序也是”书到用时方恨少“,比如这次单纯的使用串口1已经不足以满足需求,我想过使用串口2,可是在这样时间比较紧的情况下,我还有那么多时间区进行串口2调试吗?或许有人说,串口2跟1差不多,直接用啊,,,但是我想说,对于一个没有用的东西来说,在时间紧,任务多的情况下,已然没有时间再去搞了,及时它比较简单,而且平时对于各个外设的使用没有总结,不知道有何区别,又如何快速熟练的使用呢?这个问题确实值得注意……

  以上就是我在这两天的调试中所总结的自己的问题,学习不能像蜻蜓点水一样,否则,真正到用的时候就该傻眼了,希望大家看了之后能够吸取我的教训,在生活中就注意这些问题。 同时,以上总结也是我自己个人最自己的总结,带有强烈的主管色彩,希望大家看看就好,有什么问题,欢迎留言……加油,小火把!

    

【三支火把】---CDS5516舵机调试以及自己的感想!的更多相关文章

  1. 【三支火把】---队列和栈的C程序实现

    这几天总结了C语言的队列,栈的实现方法,在此总结一下:一.栈 首先从栈开始,诚然,相信学习过数据结构的你,肯定应该知道栈是什么东西了,如果不知道也没事每一句话我就可以帮你总结--数据只在栈顶进行插入和 ...

  2. 【三支火把】---C文件学习

    ---恢复内容开始--- 又看了一遍文件的知识点了,断断续续已经看了2-3遍,也就这次花了点时间做了一下总结,以后我想都不会再去翻书了,哈哈. 1. 基于缓冲区的文件操作2. 打开关闭文件3. 单个字 ...

  3. 【三支火把】---C语言面试问题总结

    看了一份关于HR在面试一名C程序员可能提问的问题手册,学到了很多,很多都是一些琐碎的知识点,总是你写过很多大型的C程序,但是我敢说,里面也有你没掌握的东西. 1.全局变量和局部变量有何区别? 答:全局 ...

  4. 【三支火把】---C语言const用法总结

    C语言关键字const相信对于不少C语言新手是既陌生又熟悉的,好像经常见,但是却不知道为何用,怎么用?学习至此,总结一下const的用法,使用程序来帮助你理解该关键字,希望能帮到像我一样的新手. 我看 ...

  5. 【三支火把】---常用C语言控制台函数总结(持续更新)

    写了这么久的C程序,每次看到输出的结果都是从上往下排列的黑白框,有没有感觉很无聊啊?今天再次总结一个常用的控制台函数,能够帮助你做好一个好看的界面. 1.设置光标位置代码如下: int main(vo ...

  6. 【三支火把】---C指针总结

    好久没写博客了,重新学习C语言了的基础课程,发现很多东西都忘记的差不多了,闲来无事,总结一下关于指针的知识,希望能帮到像我一样的菜鸟们: 指针,众所周知是C语言的精华所在,不懂指针的话,你就不要说你学 ...

  7. 【三支火把】---一份程序看懂C程序printf()的几种常用用法

    闲来继续巩固我的学习之路,今天略微整理了一下,C程序中Printf()的一些常用用法,虽然自己以前好像会,但是不够系统,今天大致整理了一些,先贴上来看看,以后在看到其他,继续补充,希望能帮到一些像我一 ...

  8. 【三支火把】--- 关于UEFI&PCD的总结介绍

    1个人理解 个人理解PCD基本等同于Token,应当算是一种描述性语言,按照规定书写好PCD的配置档,在编译的过程中,会根据你的配置生成同等含义的C文档,而在C文档中对应会出现相应的define或者变 ...

  9. 【三支火把】--- 关于BIOS&UEFI查阅资料网站总结

    UEFI和BIOS的水太深,网上能找到的资料是那么的少,各个组织之间互有交叉,难弄的很,总结了下常用的BIOS资料网站,仅供参考,如果遗漏之处,请指出,博主将继续完善补充……

随机推荐

  1. POJ3485 区间问题

    题目描述有些坑.. 题意: 有一条高速公路在x轴上,从(0,0)到(L,0).周围有一些村庄,希望能够在高速公路上开通几个出口,使得每个村庄到最近的出口距离小于D,求出最少需要开通多少个出口. 解题思 ...

  2. Ajax、Comet与Websocket

    从 http 协议说起 1996年IETF  HTTP工作组发布了HTTP协议的1.0版本 ,到现在普遍使用的版本1.1,HTTP协议经历了17 年的发展.这种分布式.无状态.基于TCP的请求/响应式 ...

  3. 搜集的一些RTMP项目,有Server端也有Client端

    查询一些RTMP的协议封装时找到了一些RTMP开源项目,在这里列举一下,以后有时间或是有兴趣可以参考一下: just very few of them. Red5 only contains a se ...

  4. Linux Kernel 4.8分支第4个候选版本发布

    导读 今天,大神Linus Torvalds宣布了Linux 4.8分支的第四个候选版本,该候选版本在提供常规驱动更新.架构改善和部分KVM调整之外最大的新功能就是修复了英特尔Skylake电源管理B ...

  5. equals方法

    一.equals方法介绍 1.1.通过下面的例子掌握equals的用法 package cn.galc.test; public class TestEquals { public static vo ...

  6. Drawer Layout

    http://developer.android.com/training/implementing-navigation/nav-drawer.html#DrawerLayout <menu ...

  7. 10、TV UI

     TV UI布局 1. 为大屏幕提供适当的布局源文件. 2. 确保UI在一定距离仍然可以看清. 3. 为高清电视提供高分辨率的图标和图像. 1. 把屏幕上的导航控制菜单放在屏幕的左边或者右边,并且将 ...

  8. SQL注入中利用XP_cmdshell提权的用法(转)

    先来介绍一下子服务器的基本情况,windows 2000 adv server 中文版,据称 打过了sp3,asp+iis+mssql .首先扫描了一下子端口,呵呵,开始的一般步骤. 端口21开放: ...

  9. bjfu1099 度度熊大战僵尸

    这也是2011年百度之星的一道题. 这题我就是乱搞搞过的,打代码之前自己心里也没底,不知道能不能过的. 我的做法很简单,就是按时间顺序依次构造能杀死的僵尸血量,找到第k小的.构造的方法也很暴力:对t时 ...

  10. 在word中显示漂亮的代码

    在word中粘贴或写代码时,通常得不到想要的格式,可用‘Notepad++’工具实现. 步骤: (1)安装Notepad++软件,把代码粘贴进去,选择菜单栏中的语言,然后选择相应代码语言,如P-> ...