使用Makefile开发STM32

使用Makefile开发STM32
使用Makefile开发STM32

从今天开始,写Ubuntu下使用Makefile开发STM32,来水一下经验,希望大家不要见怪。几天一篇。这个帖子作为一个合集,以后新出教程(或许叫做笔记更好吧)的网址就贴在这个地方。方便大家阅读。

鉴于篇幅的原因,有些东西不能够写的太细,比如什么软件的安装啊,或者设置PATH 路径啊。还请大家自行谷歌。当然了,谷歌已经挂了,还是用镜像吧。这个镜像我用过几个月了,很稳定,一直没有出现什么问题。

Ubuntu不同与windows。可以你会说在Ubuntu下开发是瞎折腾。当然,如果你在windows下开发会有许多优秀的IDE。有付费的,有免费的。但是在Ubuntu下却不同。虽然你可以使用Eclipse装插件的方式来编写,但我看来那并不是一个好方法。特别是对刚开始进行Linux下开发的人来说。那个插件给你做了太多的东西。在他的基础上,你不会深入的理解newlib库的系统调用。出了问题之后,甚至不知道从何下手。所以,对新手来说,最好的方法就是不使用IDE,虽然这可能有些困难。

说这么多并不是为了黑IDE,也不是为了体现命令行下的编译多厉害。只是想说IDE,让我们变笨。一旦习惯了IDE之后,我们甚至忘了程序是如何链接的,甚至不知道为什么需要将多个源文件一股脑的加进工程中。或许有人还会在main.c文件里面写几千行代码,而不是将他们分文件组织。刚开始在Ubuntu下开发STM32的时候,我也曾怀念Windows下IDE的日子。有那些熟悉的Keil,IAR,CoIDE。我也曾想将window下的IDE搬到Ubuntu上面。于是开始安装wine。可是事情并不像想象中的那样发展。于是我给Eclipse装插件,一步一步的摸索。然而网上陈旧的资料并不总是有效。特别是在软件版本更新这么快的时代。无论如何,最后还是如愿的装上了。但是里面的文件太过繁杂,并不适合。

Eclipse行不通之后,我又对CodeBlocks动手。用它开发STM32,经过若干天的失败之后,终于能够用它编译程序,点亮一个LED灯了。只是成功的一小步。用着用着,发现如果我想改一个编译参数,比如用C99吧,却要动那么多次鼠标。想加一个头文件路径,还要使用鼠标进行繁杂的操作。终于想通,告别IDE,拥抱Makefile。

下面的几篇教程会讲解如何在Ubuntu下用命令行开发STM32。敬请期待!

以下的所有帖子都是在Nucleo303(之前在社区兑换的)的基础上编写

的。如果你想更换其他的板子,请更改固件库中的所有文件,以及链接

文件。

0.工欲善其事https://www.360docs.net/doc/fa4982843.html,/module/forum/thread-603768-1-1.html

在Ubuntu下寻找Nucleo的串口号。

安装常用的串口软件。minicom,putty。

安装st-link在Ubuntu下的驱动程序。包括下载用的st-flash,调试用的st-util。

安装arm-none-eabi-xxx。

使用Makefile进行简单的工程管理。

固件库准备

编写Makefile

编写main函数。

编译,链接,下载

未优化(6372Bytes)

-Os优化(3780Bytes)

-ffunction-sections,-fdata-sections,-Wl,--gc-sections优化(1680Bytes)

-ffunction-sections,-fdata-sections,-Wl,--gc-sections,-Os优化(1348Bytes)

4.在SRAM中运行程序https://www.360docs.net/doc/fa4982843.html,/module/forum/thread-603793-1-1.html

反汇编代码

分析flash.ld链接文件

修改flash.ld,将代码区域更改到RAM中

修改Makefile,生成SRAM中运行的代码。

下载,反汇编验证。

隐含的巨大bug。(中断向量表的问题)

ringbuffer

在中断中使用ringbuffer

使用gdb调试

添加volatile修正代码

修正ringbuffer的无锁实现。

隐含的bug。(中断向量表的问题。下节讲述)

SCB->VTOR

更改Makefile进行版本控制

修改__io_getchar适用backspace

_exit系统调用

7.使用printf https://www.360docs.net/doc/fa4982843.html,/module/forum/thread-603927-1-1.html

syscalls

使用Newlib-nano减小代码大小

为Newlib-nano添加printf的浮点输出支持。

8. 使用硬浮点计算https://www.360docs.net/doc/fa4982843.html,/module/forum/thread-603940-1-1.html

反汇编相关软浮点代码

添加硬浮点运算的参数

反汇编相关硬浮点代码

9.再谈_exit https://www.360docs.net/doc/fa4982843.html,/module/forum/thread-603942-1-1.html

返回值和参数的传递规则

将main的返回值传递给_exit

动态内存分配机制

malloc内存分配测试

为栈保留安全域量

内存布局

11.使用gdb找出因除0导致的HardFault。

https://www.360docs.net/doc/fa4982843.html,/module/forum/thread-604503-1-1.html

STM32建工程详细方法步骤

1、首先找到ST官方最新版本的固件库:STM32F10x_StdPeriph_Lib_V3.5.0 STM32F10x_StdPenph_Ub_V3.5. 0 文件实 2、新建一个工程文件夹:比如led工程文件夹 3、在led工程文件夹中新建 5个文件夹:COREHARDWARESTM32F10x_FWL、 SYSTEM USER COR用来存放启动文件等 HARDWARE来存放各种硬件驱动代码 STM32F10x FWLi文件夹顾名思义用来存放ST官方提供的库函数源码文件 SYSTEM文件夹下包含了delay、sys、usart等三个文件夹。分别包含了delay.c、sys.c、usart.c 及其头文件 delay.h、sys.h、usart.h

USER用来存放我们主函数文件 main.c ,以及其他包括system_stm32f10x.c 等 4、将固件库包里面相关的启动文件复制到我们的工程目录COR之下 打开固件库STM32F10x_StdPeriph_Lib_V3.5.0文件夹,定位到目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将文件core_cm3.c和文件core_cm3.h复制到COR下面去。然后定位到目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\S TM32F10x\startup\arm 下面,将里面 startup_stm32f10x_md.s、 startup_stm32f10x_ld.s 、startup_stm32f10x_hd 复制到 COREF面。这里我们解释一下,其实我们只用到 arm目录下面的startup_stm32f10x_md.s 文件,这个文件是针对中等容量芯片的启动文件。其他两个主要的为 startup_stm32f10x_ld.s 为小容量,startup_stm32f10x_hd.s 为大容量芯片的 启动文件。这里copy进来是方便其他开发者使用小容量或者大容量芯片的用户。现在看看我们的CORE文件夹下面的文件:

飞鸿16路舵机控制器使用说明书

FH24路舵机控制器使用说明书 飞鸿科技 2012-5-24 一、产品介绍 (1) 二、功能特点 (3) 三、接口说明 (4) 四、指令说明 (6) 五、16路舵机调试软件使用说明 (7) 二、连接PC上位机 (9) 三、上位机界面编辑 (10) 四、单路舵机调试 (11) 五、动作组编辑 (12) 六、注意事项及故障解决 (13) 产品介绍 一、 一、产品介绍 设计该舵机控制板是为了方便新手学习多路舵机的控制。多路舵机控制并不很复杂,但至今网上关于多路舵机控制的资源很少,当前淘宝上的舵机控制板也都不提供程序代码。由于这些原因,大批的机器人爱好者不能掌握多路舵机控制。使得很多机器人爱好者停滞不前,在这些最基本的地方浪费大量时间,不能不精力放到更高层的机器人控制方面的研究。如果每个人

都从头做起,整体的进步必将非常的缓慢。别人做好的东西我们不妨拿来学习,这样要节省很多的时间与精力。在这个基础上继续前进,做出属于自己的更高级的机器人。 由于本人在这些基础的东西上耗费的大量的精力,导致我没有时间去做高级的控制,如自平衡,语音识别等。大学接近尾声,没能让自己的机器人进一步升级感到非常遗憾。 基于方便学习的原则,本板子的设计有一下几个特点: 1、选用大家熟悉的,容易掌握的51单片机。但不是普通51单片机,是功能强大的增强型单片机STC12C5A60S2。 有人说51控制的精度肯定不如ARM。是的,这是明显的事实。但是我用ARM的芯片来写教程,只能给少数人看,而且如果那个人ARM掌握的都很好了,也不需要看此教程了。该控制板设计的目的就是给机器人初级爱好者学习,仅仅因为这一点,选择51单片机是最恰当不过了。 我最初做的32路舵机控制板就是在arm芯片上做的,那些不适合新手学习,在51上学会了舵机控制的基本方法,等你会使用更高级单片机的时候可以很容易的移植到上面,实现更多舵机,更高精度的控制。 STC12C5A60S2单片机属于增强型51。他兼容传统的51单片机,也就是说,你原来的学习的、编写的51程序不用改动就能在这个单片机上直接使用,不会出现问题,而且速度提高8~12倍。但是它与传统51相比,在速度性能与资源方面都有了很大的提升。 (1)60K的flash程序存储器。89C52只有8K。 (2)1280字节的SRAM。你课本上学的RAM只有128字节。1280足够用了,省去外部扩展的麻烦。 (3)两个串口。 (4)独立波特率发生器。做机器人定时器往往很不够用,而传统51单片机串口通信还要占用定时器,有了独立波特率发生器就可以节省出一个定时器。 (5)PCA模块。可以硬件输出快速PWM。可以扩展出两个定时器。 (6)8路A/D转换通道。A/D转换在机器人、各种比赛中都很常用,使用这款单片机就不必再做AD转换电路。 2、程序下载接口、IO口引出。该板是单片机最小系统板+16路舵机控制板。不是单纯的舵机控制板,而是一款可以用来学习、编程、二次开发的开发板。可以直接用来参加比赛,DIY,毕业设计。 5、详细的教程,丰富的资料。该板子是淘宝中唯一提供程序代码、可以学习的舵机控制板。提供原理图、接口示意图、程序代码、上位机软件。另外购买该产品赠送本人搜集的单片机开发常用工具软件,机器人资料,单片机视频教程以及丰富的例程。

STM32的Keil工程文件建立过程

固件库采用3.5.0版本 USE_STDPERIPH_DRIVER,STM32F10X_CL 1.首先建立工程文件,将固件库中的文件复制过来 建立工程文件夹project,包含文件夹 user:用户可自己修改的文件 CMSIS:Cortex-M3内核相关文件 startup:启动单片机的汇编文件 driver:外设操作的驱动文件 具体向工程文件夹中添加的文件为: 将路径:固件库文件夹\Project\STM32F10x_StdPeriph_Template中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h文件添加到user文件夹,再在其中建立一个main.c主文件 将路径:固件库文件夹\Libraries\CMSIS\CM3\CoreSupport中的core_cm3.c、core_cm3.h 文件,以及固件库文件夹\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h文件添加到CMSIS文件夹 将路径:固件库文件夹\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 中的startup_stm32f10x_cl.s(互联型启动文件)文件添加到startup文件夹 将路径:固件库文件夹\Libraries\STM32F10x_StdPeriph_Driver中的src和inc文件夹全部复制到driver文件夹

2.在Keil中建立工程并管理工程文件

舵机及舵机的控制

舵机及舵机的控制 1.什么是舵机: 在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。 舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。 还是看看具体的实物比较过瘾一点: 2.其工作原理是: 控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。 3.舵机的控制: 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为 0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关 系是这样的:

0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 请看下形象描述吧: 这只是一种参考数值,具体的参数,请参见舵机的技术参数。 小型舵机的工作电压一般为4.8V或6V,转速也不是很快,一般为0.22/60度或0.18/60度,所以假如你更改角度控制脉冲的宽度太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。 要精确的控制舵机,其实没有那么容易,很多舵机的位置等级有1024个,那么,如果舵机的有效角度范围为180度的话,其控制的角度精度是可以达到180/1024度约0.18度了,从时间上看其实要求的脉宽控制精度为2000/1024us约2us。如果你拿了个舵机,连控制精度为1度都达不到的话,而且还看到舵机在发抖。在这种情况下,只要舵机的电压没有抖动,那抖动的就是你的控制脉冲了。而这个脉冲为什么会抖动呢?当然和你选用的脉冲发生器有关了。一些前辈喜欢用555来调舵机的驱动脉冲,如果只是控制几个点位置伺服好像是可以这么做的,可以多用几个开关引些电阻出来调占空比,这么做简单吗,应该不会啦,调试应该是非常麻烦而且运行也不一定可靠的。其实主要还是他那个年代,单片机这东西不流行呀,哪里会哟! 使用传统单片机控制舵机的方案也有很多,多是利用定时器和中断的方式来完成控制的,这样的方式控制1个舵机还是相当有效的,但是随着舵机数量的增加,也许控制起来就没有那么方便而且可以达到约2微秒的脉宽控制精度了。听说AVR也有控制32个舵机的试验板,不过精度能不能达到2微秒可能还是要泰克才知道了。其实测试起来很简单,你只需要将其控制信号与示波器连接,然后让试验板输出的舵机控制信号以2微秒的宽度递增。

STM32工程建立(F4系列)

使用MDK(Keil)建立一个STM32工程模板的流程如图所示: 一.获取ST库源码。到ST公司的官网进行查找并下载,如图所示: 1.新建工程文件夹——《STM32工程模板》。首先,新建工程文件夹《STM32工程模板》,然后再在该文件夹下新建6个文件夹,分 别:《Doc》、《BSP 》、《Listing》、《Output》、《Project》和《User》。其中, 2.《Doc》用于存放各种说明文档; 《BSP 》用于存放各种库文件; 《Listing》用于存放编译时产生的中间文件; 《Output》用于存放生成的下载所需的文件; 《Project》用于存放工程文件; 《User》用于存放用户文件,即我们自己编写的各种源文件。具体情况如下图所示: 具体步骤,以KEIL5 MDK5.18中建立STM32F417工程为例: 二.STM32工程建立(F4系列) 2016年4月13日16:57

将下载的stm32f4_dsp_stdperiph_lib_zip 压缩包中的文件复制到工程模板文件 夹下的STM32F4XX_StdPeriph_Driver 文件夹。如下图: 1)将stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1 \Libraries\CMSIS\Include 文件夹中对应的core_cm 文件复制到工程模板文件夹下的CMSIS文件夹。具体操作情况如下图: 2)向建立的工程文件夹中添加库文件。 3.

将stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1 \Libraries\CMSIS\Device\ST\STM32F4xx\Include 文件夹中文件复制到工程模板文件夹下的CMSIS 文件夹。具体操作情况如下图: 3)将stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1 \Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 文件夹中对应芯片的startup 文件复制到工程模板文件夹下的CMSIS 文件夹。具体操作情况如下图: 4)将库文件中Project文件夹下的相关文件复制到工程模板文件夹下的User文件 夹中。具体操作情况如下图: 5)

Keil4 建立STM32工程详解

Keil4 建立STM32工程详解 1:安装mdk412,用注册机注册,这个过程不详细叙述了。 2:在本地某个路径下建立STM32工程文件夹,命名:my_STM32,并在my_STM32下建立rvmdk文件夹,并在rvmdk文件夹内建立 obj,list两个文件夹。 3: 打开Keil4. 4: 选择Project菜单->New uVision Project...,选择.../my_STM32/rvmdk文件夹的路径,并命名工程文件:my_STM32,回车 5:选择器件名称,见图1

图1 单击OK。 6:如图2所示:选择否,不添加Startup.s,以后自己添加。 图2 7:如图3,建立几个Group:startup(即将装入启动文件等),usr(即将装入应用程序文件),FWlib(即将装入库文件的.c文件),doc(即将装入说明文档)

图3 8:右键单击FWlib,Add Files to Group 'FWlib',选择库文件的路径下的src 文件内的所有文件,并点击Add,如图4所示:

图4 9:将cortexm3_macro.s,stm32f10x_vector.s,stm32f10x_it.c, stm32f10x_it.h,stm32f10x_conf.h,main.c,readme.txt拷贝到my_STM32文件夹内。 10:右键单击usr,Add Files to Group 'usr',选择main.c,stm32f10x_it.c,stm32f10x_it.h,stm32f10x_conf.h,并Add,如图5所示

舵机控制板使用说明(中文)

舵机控制板使用说明V1.2 产品特点 ●采用32位ARM 内核的处理器芯片 ●独创的在线升级机制,用户可以在线升级固件 ●自动识别波特率 ●采用USB和UART通讯接口 ●1us的控制精度(相当于舵机的0.09度) ●可以同时同步控制32个舵机(24路舵机控制板可以同时同步控制24个,16路舵机控制板可以同时 同步控制16个舵机) ●内置512K 存储芯片,可存储上百个动作组 ●功能强大的电脑软件(内置3种语言,简体中文、繁体中文、英语) ●拥有Android手机控制软件 供电 舵机控制板需要2个电源: 舵机电源和芯片电源 舵机电源(正极):VS(图中3号位置的蓝色接线端子的左端) 舵机电源(负极):GND(图中3号位置的蓝色接线端子的中间) 舵机电源的参数根据实际所接舵机的参数而定,如TR213舵机的供电电压是4.8-7.2V,那么舵机电源就可以用电压在4.8-7.2V之间的电源。 芯片电源(正极):VSS(图中3号位置的蓝色接线端子的右端)

芯片电源(负极):GND(图中3号位置的蓝色接线端子的中间) VSS的要求是6.5-12V,如果芯片供电是从VSS端口输入的,那么电源的电压必须是6.5-12V之间。 另外: 1. 图中2号位置的USB接口可以给芯片供电,所以USB接口和VSS端口,任选其一即可。 2. 图中1号位置也可以给芯片供电,标记为5V和GND,5V是正极,GND是负极,供电电源的电压必 须是5V。 3. 图中1、2、3号位置都可以给芯片供电,任选其一即可。 4. 图中4号位置的绿色LED灯是芯片电源正常的指示灯,绿色灯亮,表示芯片供电正常,绿色灯灭,表 示芯片供电异常。 5. 图中5号位置的绿色LED灯是舵机电源正常的指示灯,绿色灯亮,表示舵机供电正常,绿色灯灭,表 示舵机供电异常。 如果需要控制舵机,2个绿色的LED灯都亮是前提条件。

(仅供参考)STM32F105RBT6最小系统原理及工程的建立

市面上的许多stm32开发板都是使用ULINK2作为调试仿真工具,鉴于ULINK2所需引脚过多在学习时还可以,但应用于实际电路设计生产会造成许多硬件资源的浪费。鉴于此,本人经实验得出利用ST-LINK作为仿真下载工具的实验最小系统电路。希望给大家作为参考。 一、最小系统原理图 二、建立工程的步骤 1、先在一个文件夹内建6个子文件夹: DOC:放说明文件 Libraries:放库文件(CMSIS、FWlib) Listing:放编译器的中间文件 Output:放编译器的输出文件 Project:放项目工程 User:放自己编写的程序、main、stm32f10x_conf、stm32f10x_it.C、stm32f10x_it.h

2、双击桌面UV4图标启动软件,,---NWE uVision Project--选择保存地方----选择芯片型号------在左边处建立5个GOP(STARTUP放启动文件)、(CMSIS放内核文件)、(FWLIB放库里面的src的.C文件)、(USER 放自己写的程序文件及stm32f10x_conf.h、stm32f10x_it.h、stm32f10x_it.c、main.c)

3、将Output重置到一开始时所建的“Output”文件夹中。 4、将Listing重置到一开始时所建的“Listing”文件夹中。 5、在C、C++处的“Define”输入:STM32F10X_HD,USE_STDPERIPH_DRIVER。对于不同的芯片容量,可对HD进行更改(LD、MD、HD、XL、XC)。然后在“Include Paths”处指定相关的搜库位置。 6、Debug处选好下载器

舵机原理及其使用详解

舵机的原理,以及数码舵机VS模拟舵机 一、舵机的原理 标准的舵机有3条导线,分别是:电源线、地线、控制线,如图2所示。 以日本FUTABA-S3003型舵机为例,图1是FUFABA-S3003型舵机的内部电路。 3003舵机的工作原理是:PWM信号由接收通道进入信号解调电路BA6688的12脚进行解调,获得一个直流偏置电压。该直流偏置电压与电位器的电压比较,获得电压差由BA6688的3脚输出。该输出送入电机驱动集成电路BAL6686,以驱动电机正反转。当电机转动时,通过级联减速齿轮带动电位器Rw1旋转,直到电压差为O,电机停止转动。 舵机的控制信号是PWM信号,利用占空比的变化,改变舵机的位置。 有个很有趣的技术话题可以稍微提一下,就是BA6688是有EMF控制的,主要用途是控制在高速时候电机最大转速。 原理是这样的:

收到1个脉冲以后,BA6688内部也产生1个以5K电位器实际电压为基准的脉冲,2个脉冲比较以后展宽,输出给驱动使用。当输出足够时候,马达就开始加速,马达就能产生EMF,这个和转速成正比的。 因为取的是中心电压,所以正常不能检测到的,但是运行以后就电平发生倾斜,就能检测出来。超过EMF 判断电压时候就减小展宽,甚至关闭,让马达减速或者停车。这样的好处是可以避免过冲现象(就是到了定位点还继续走,然后回头,再靠近) 一些国产便宜舵机用的便宜的芯片,就没有EMF控制,马达、齿轮的机械惯性就容易发生过冲现象,产生抖舵 电源线和地线用于提供舵机内部的直流电机和控制线路所需的能源.电压通常介于4~6V,一般取5V。注意,给舵机供电电源应能提供足够的功率。控制线的输入是一个宽度可调的周期性方波脉冲信号,方波脉冲信号的周期为20ms(即频率为50Hz)。当方波的脉冲宽度改变时,舵机转轴的角度发生改变,角度变化与脉冲宽度的变化成正比。某型舵机的输出轴转角与输入信号的脉冲宽度之间的关系可用围3来表示。

keil_MDK建立工程步骤方法

KEIL工程建立步骤点击Next,勾选安装协议:

下一步,选择安装路径(笔者因硬盘空间不足安装在E盘,但若读者硬盘资源充裕,则建议安装在C盘,跑起来快些): 下一步,填写用户信息,个人用户随意填入即可:

点击Next 就进入实质的安装过程啦,Wait for a Whle…… 很快安装完毕,看到2 个可选项: 1、保持当前uVision 的设置。 2、载入以下选择的工程实例,默认即可。

点击Next,来到最后一个安装界面: 1.是否安装ULINK Pro Driver V1.0驱动? 2.是否显示软件发布说明? 读者可以按照自己的需求勾选。 点击Finish,KEIL MDK就完成安装了,可以发现桌面上生成了名为“Keil uVision4”的可执行文件快捷方式。双击“Keil uVision4”图标打开Keil uVision4开发环境,此时Keil uVision4会自动载入一个工程项目(依安装的倒数第二步勾选而定),我们就此可以简单地看看KEIL MDK 的用户界面。

如图所示,KEIL MDK的基本用户界面也是很简洁的,也是由一些菜单栏,工具栏,状态栏等区域构成。当然KEIL MDK的软件界面远远不止这么简单,读者可以在日后漫长的工程师生涯逐一熟悉。 至此,KEIL MDK的安装工作已经完毕了。接下来我们要开始建立我们的第一个工程。在开始之前,请读者先从网上获取ST公司提供的STM32固件库“stm32f10x_fw_archive v2.0 (May 2009)”,然后将其解压。 首先请读者在任意一个地方建立一个空文件夹,并将其命名为“STM32_FW”。然后在STM32_FW 里新建6个文件夹,分别命名为“boot”、“library”、“src”、“obj”、“list”、“library”。 如下图所示: 接下来请执行如下操作:

STM32F4XX新建工程步骤

一:建立文件夹 1.复制库函数中Libraries文件夹到你所需建立工程的文件夹下,例:我在Example文件夹下建立工程,那么把Libraries文件夹复制到Example。 2.在你所需建立工程的文件夹下新建文件夹User。我在Example下建立User文件夹。 https://www.360docs.net/doc/fa4982843.html,er文件夹下建立Obj和List文件夹 4.拷贝库函数里Periject/STM32F4xx_StdPeriph_Templates文件夹下main.c,stm32f4xx_it.c 和stm32f4xx_it.h到User文件夹下 5.拷贝库函数里Periject/STM32F4xx_StdPeriph_Templates文件夹下stm32f4xx_conf.h到 Libraries\CMSIS\Device\ST\STM32F4xx\Include 6.在你所需建立工程的文件夹下新建文件夹CMSIS。 7.在你所需建立工程的文件夹下新建文件夹MDK-ARM。 8.在你所需建立工程的文件夹下新建文件夹STM32F4xx_StdPeriph_Driver。 目前建立的文件夹如图所示: 二:建立工程: 1.打开Keil4新建工程文档,路径选择为MDK-ARM,选择芯片,然后点否:不添加。 2.然后添加刚刚新建文件夹名字的组。 添加完成后如图:

三:给各个组添加文件: https://www.360docs.net/doc/fa4982843.html,er文件夹下添加添加步骤一中User文件夹中的main.c和stm32f4xx_it.c。 2.CMSIS文件夹下添加步骤一中Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates中的system_stm32f4xx.c。 3.MDK-ARM文件夹下添加Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm中的startup_stm32f4xx.s。这个我是用的Keil,所以选arm文件夹下的,其他软件就选其他软件的吧。 4.STM32F4xx_StdPeriph_Driver是驱动,用到哪个外设就添加哪个外设就是,在这个路径Libraries\STM32F4xx_StdPeriph_Driver\src 添加完成后如图: 四:Target设置: 1.output选项:输出指定到步骤一中Obj文件夹。 2.List选项:输出指定到步骤一中List文件夹中。 3.C/C++选项:Define框中填入:“STM32F4XX,USE_STDPERIPH_DRIVER”(不要引号) 如图: IncludePaths框中填入:Libraries\STM32F4xx_StdPeriph_Driver\inc Libraries\CMSIS\Device\ST\STM32F4xx\Include 添加完成后如图:

STM32 开发板的介绍

STM32 开发板的介绍 STM32的开发板硬件资源如下: 1、STM32F103RBT6 TQFP64 FLASH:128K SRAM:20K; 2、MAX232通讯口可用于程序代码下载和调试实验; 3、SD卡接口; 4、RTC后备电池座; 5、两个功能开关; 6、复位连接; 7、两个状态灯; 8、所有I/O输出全部引用; 9、USB接口、可用于USB与MCU通讯实验; 10、标准的TJAG/SWDT仿真下载; 11、BOOT0 BOOT1Q启动模式; 12、电源开关; 13、电源指示灯

STM32开发板硬件详解 1、MCU部分原理图 该开发板采用3.3V工作电压,几个耦合电容使系统更加稳定。系统工作频率8M晶振、时钟频率32.768。 这里STM32的VBAT采用CR1220纽扣电池和VCC3.3混合供电方式,在有外部电源(VCC3.3)的时候,CR1220不给VBAT供电,而在外部电源断开的时候,则由CR1220给VBAT供电。这样,VBAT 总是有电的,以保证RTC的走时以及后备寄存器的内容不丢失。2、启动模式电路图 上图中的BOOT1用于设置STM32的启动方式,其对应启动模式如下表所示

PCB板标志图解如下: 3、TJAG电路 4、LED状态灯原理图 两个LED状态灯,其中LED0接在PA8、LED1接在PD2。 5、SD卡原理图

SD卡我们使用的是SPI1模式通讯,SD卡地SPI接口连接到STM32的SPI1上,SD-CS接在PA3上,MOSI接MCU PA7(MOSI)、SCK 接在MCU PA5(SCK)、MIS0接在MCU PA6(MIS0). 6、按键原理图 KEY1和KEY2用作普通按键输入,分别接在PA13和PA15上,

舵机的相关原理与控制原理

1.什么是舵机: 在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。 舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。 2.其工作原理是: 控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。 3.舵机的控制: 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为 0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关 系是这样的: 0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 请看下形象描述吧:

这只是一种参考数值,具体的参数,请参见舵机的技术参数。 小型舵机的工作电压一般为4.8V或6V,转速也不是很快,一般为0.22/60度或0.18/60度,所以假如你更改角度控制脉冲的宽度太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。 要精确的控制舵机,其实没有那么容易,很多舵机的位置等级有1024个,那么,如果舵机的有效角度范围为180度的话,其控制的角度精度是可以达到180/1024度约0.18度了,从时间上看其实要求的脉宽控制精度为2000/1024us约2us。如果你拿了个舵机,连控制精度为1度都达不到的话,而且还看到舵机在发抖。在这种情况下,只要舵机的电压没有抖动,那抖动的就是你的控制脉冲了。而这个脉冲为什么会抖动呢?当然和你选用的脉冲发生器有关了。一些前辈喜欢用555来调舵机的驱动脉冲,如果只是控制几个点位置伺服好像是可以这么做的,可以多用几个开关引些电阻出来调占空比,这么做简单吗,应该不会啦,调试应该是非常麻烦而且运行也不一定可靠的。其实主要还是他那个年代,单片机这东西不流行呀,哪里会哟! 使用传统单片机控制舵机的方案也有很多,多是利用定时器和中断的方式来完成控制的,这样的方式控制1个舵机还是相当有效的,但是随着舵机数量的增加,也许控制起来就没有那么方便而且可以达到约2微秒的脉宽控制精度了。听说AVR也有控制32个舵机的试验板,不过精度能不能达到2微秒可能还是要泰克才知道了。其实测试起来很简单,你只需要将其控制信号与示波器连接,然后让试验板输出的舵机控制信号以2微秒的宽度递增。 为什么FPPA就可以很方便地将脉宽的精度精确地控制在2微秒甚至2微秒一下呢。主要还是 delay memory这样的具有创造性的指令发挥了功效。该指令的延时时间为数据单元中的立即数的值加1个指令周期(数据0出外,详情请参见delay指令使用注意事项)因为是8位的数据存储单元,所以memory中的数据为(0~255),记得前面有提过,舵机的角度级数一般为1024级,所以只

如何为STM32F030建立工程模板6

如何为STM32F030建立工程模板最近在学习STM32F030的相关知识,在建立工程模板过程中总结了一些经验; 这些经验大多是通过网络找到的;实际上是炒了正点原子的剩饭,望其莫怪; 现在共享给大家,希望对大家能有帮助; 首先、在建立工程之前,建议各位童鞋在电脑的某个目录下面建立一个文件夹,后面所建立的工程文件都放在这个文件夹下面,这里我们建立一个文件夹为LED。 注意,关于文件夹的命名,建议大家都用英文, 也就是说让这个工程创建在一个全英文的路径下,这样可以避免在链接的过程出现错误; 1、回到MDK主界面,可以看到工程中有一个默认的工程, 点击这个工程名字,然后选择菜单Project->Close Project,就关闭掉这个工程了! 这样整个MDK就是一个空的了,接下来我们将建立我们的工程模版。 2、点击Keil的菜单:Project–>New Uvision Project, 然后将目录定位到刚才建立的文件夹LED之下, 在这个目录下面建立子文件夹USER(我们的代码工程文件都是放在USER目录,很多人喜欢新建“Project”目录放在下面,这也是可以的,这个就看个人喜好了), 然后定位到USER目录下面,我们的工程文件就都保存到USER文件夹下面。 工程命名为LED,点击保存。 接下来,我们在LED工程目录下面,新建3个文件夹CORE,OBJ以及STM32F0_FWLib。CORE用来存放核心文件和启动文件, OBJ是用来存放编译过程文件以及hex文件, STM32F10x_FWLib文件夹顾名思义用来存放ST官方提供的库函数源码文件。 USER目录除了用来放工程文件外, 还用来存放主函数文件main.c,以及其他包括system_stm32f10x.c、等等

STM32工程文件建立的方法

STM32根据库建立自己的工程 ■利用STM32的官方库在Keil uVision 4中新建一个工程的步骤: 一. 新建工程时的软件操作,工程配置方法: 1. 点击菜单栏的Project → New uVision Project,新建一个工程文件,取名,设置好保存路径后,点击“保存”即可。 2. 接着弹出一个对话框,选择芯片型号,我们用的是ST公司的STM 32F103VE,选择该芯片,点击“OK”即可。 3. 接着弹出的对话框,如下,问我们是否要拷贝STM 32的启动代码到工程文件中,这份启动代码在M 3系列中都是适用的,我们可以点击“是”。但是,这里用ST的固件库创建工程,库里面也有启动代码文件,为了保持库的完整性,我们就不需要开发环境自带的启动代码了,稍后,我们手动添加,所以这里,我们点击“否”。 4. 此时,已经新建了一个工程,但是,里面还没有我们所需的文件,接下来,就该添加所需文件了。在工程的根目录( 即,保存工程的文件夹下) 新建以下3个文件夹,User,FWlib,CMSIS。User用来存放工程文件和用户代码,包括主函数main.c。FWlib用来存放固件库里面的inc和src这两个文件夹以及它们里面的所有文件,这里面包含了芯片上的所有外设的驱动。CMSIS用来存放固件库的启动文件,和,M 3系列通用的文件。CMSIS里面的文件适合所有M 3内核的单片机。CMSIS的缩写为,Cortex Microcontroller Software Interface Standard,是ARM Cortex 微控制器软件接口标准,是ARM公司为芯片厂商提供的一套通用的且独立于芯片厂商的处理器软件接口。 5. 把固件库的Libraries \ STM32F10x_StdPeriph_Driver目录下的inc和src这两个文件夹复制到刚才新建的FWlib文件夹中。 6. 把固件库的Project \ STM32F10x_StdPeriph_Template目录下的main.c,stm32f10x_conf.h,stm32f10x_it.h,stm32f10x_it.c复制到User文件夹下。main.c也可以不复制,稍后,自己新建一个main.c文件在User文件夹下,也可以。stm32f10x_it.h,stm32f10x_it.c这两个文件里面是中断函数,里面为空,用户需要时,可以自己添加中断服务程序。stm32f10x_conf.h 是需要用户配置的头文件,当我们需要用到芯片中某部分外设的驱动时,只需要在该文件中把相应注释标记去掉,即可,这样就可以把相应头文件包含进来了。片上外设的驱动在Libraries \ STM32F10x_StdPeriph_Driver目录下的src文件夹中,它们的头文件在inc文件夹中。 7. 将固件库的Libraries \ CMSIS \ Core \ CM3文件夹下的全部文件和文件夹复制到刚才新建的CMSIS文件夹中,Startup / arm目录下一般有三个启动文件,分别为,startup_stm32f10x_ld.s,startup_stm32f10x_md.s,startup_stm32f10x_hd.s,按顺序是小,中,大容量Flash单片机的启动文件。我们这里用的是STM32F103VE有512 K Flash,属于大容量的。所以,稍后,把startup_stm32f10x_hd.s添加到我们的工程中。不同大小的Flash对应的启动文件不同,这点要注意。 8. 最后,可以把我们的工程文件,和,其它一些编译产生的文件都放在User文件夹下,这样,看起来比较整洁。 9. 回到Keil软件的工程中,鼠标右击“Target”,在弹出的菜单中选择“Add Group”选项,新建4个分组。分别命名为,STARTCODE,USER,FWlib,CMSIS。STARTCODE管理启动代码,USER

舵机的工作原理以及控制

在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。 是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。 其工作原理是: 控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20m s,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的: 0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 请看下形象描述吧: 这只是一种参考数值,具体的参数,请参见舵机的技术参数。

小型舵机的工作电压一般为4.8V或6V,转速也不是很快,一般为0.22/60度或0.18/60度,所以假如你更改角度控制脉冲的宽度太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。 要精确的控制舵机,其实没有那么容易,很多舵机的位置等级有1024个,那么,如果舵机的有效角度范围为180度的话,其控制的角度精度是可以达到180/1024度约0.18度了,从时间上看其实要求的脉宽控制精度为2000/1024us约2us。如果你拿了个舵机,连控制精度为1度都达不到的话,而且还看到舵机在发抖。在这种情况下,只要舵机的电压没有抖动,那抖动的就是你的控制脉冲了。而这个脉冲为什么会抖动呢?当然和你选用的脉冲发生器有关了。一些前辈喜欢用555来调舵机的驱动脉冲,如果只是控制几个点位置伺服好像是可以这么做的,可以多用几个开关引些电阻出来调占空比,这么做简单吗,应该不会啦,调试应该是非常麻烦而且运行也不一定可靠的。其实主要还是他那个年代,单片机这东西不流行呀,哪里会哟! 使用传统单片机控制舵机的方案也有很多,多是利用定时器和中断的方式来完成控制的,这样的方式控制1个舵机还是相当有效的,但是随着舵机数量的增加,也许控制起来就没有那么方便而且可以达到约2微秒的脉宽控制精度了。听说AVR也有控制32个舵机的试验板,不过精度能不能达到2微秒可能还是要泰克才知道了。其实测试起来很简单,你只需要将其控制信号与示波器连接,然后让试验板输出的舵机控制信号以2微秒的宽度递增。为什么FPPA就可以很方便地将脉宽的精度精确地控制在2微秒甚至2微秒一下呢。主要还是delay memory这样的具有创造性的指令发挥了功效。该指令的延时时间为数据单元中的立即数的值加1个指令周期(数据0出外,详情请参见delay指令使用注意事项)因为是8位的数据存储单元,所以memory中的数据为(0~255),记得前面有提过,舵机的角度级数一般为1024级,所以只用一个存储空间来存储延时参数好像还不够用的,所以我们可以采用2个内存单元来存放舵机的角度伺服参数了。所以这样一来,我们可以采用这样 舵机驱动的应用场合: 1. 高档遥控仿真车,至少得包括左转和右转功能,高精度的角度控制,必然给你最真实的驾车体验. 传统舵机、数字舵机与纯数字舵机 传统舵机的控制方式以20ms 为一个周期,用一个1.5ms±0.5ms 的脉冲来控制舵机的角度变化,随着以CPU 为主的数字革命的兴起,现在的舵机已成为模拟舵机和数字舵机并存的局面,但即使是现在的数字舵机,其控制接口也还是传统的1.5ms±0.5ms 的模拟控制接口,只是控制芯片不再是普通的模拟芯片而已;不能完全发挥现代数字化控制的优势,这在传统的遥控竞赛等领域,为了保持产品的兼容性,不得不保留模拟接口,而在一些新兴的领域完全可以采用新型的全数字接口的纯数字舵机。纯数字舵机采用全新的单线双工通讯协议,不仅能执行普通舵机的全部功能,还可以作为一个角度传感器,监测舵机的实际位置,而且可以多个舵机并联互不影响。在未来的自动化控制领域有着不可估量的优势。采用纯数字舵机构建的自动化控制系统,不仅可以大幅提升系统性能,而且可以降低系统的生产维护成本,提高产品性价比,增强市场竞争力。 简单认识数码舵机

舵机控制详解

舵机控制详解 Document number【AA80KGB-AA98YT-AAT8CB-2A6UT-A18GG】

本人学习了一段时间的舵机,将自己所遇到的问题与解决方案和大家分享一下,希望对初学者有所帮助!!!! 一、舵机介绍 1、舵机结构 舵机简单的说就是集成了直流电机、电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元。 舵机安装了一个电位器(或其它角度传感器)检测输出轴转动角度,控制板根据电位器的信息能比较精确的控制和保持输出轴的角度。这样的直流电机控制方式叫闭环控制,所以舵机更准确的说是伺服马达,英文 servo。 舵机组成:舵盘、减速齿轮、位置反馈电位计、直流电机、控制电路板等。 舵盘 上壳 齿轮组 中壳 电机 控制电路 控制线 下壳 工作原理:控制信号控制电路板电机转动齿轮组减速 舵盘转动位置反馈电位器控制电路板反馈 简单的工作原理是控制电路接收信号源的控制信号,并驱动电机转动; 齿轮组将电机的速度成大倍数缩小,并将电机的输出扭矩放大响应倍 数,然后输出;电位器和齿轮组的末级一起转动,测量舵机轴转动角 度;电路板检测并根据电位器判断舵机转动角度,然后控制舵机转动 到目标角度或保持在目标角度。 舵机接线方法:三线接线法:(1)黑线(地线) 红线(电源线)两个标准:和6V 蓝线/黄线(信号线) (2)棕线(地线) 红线(电源线)两个标准:和6V

黄线(信号线) 二、舵机PWM信号介绍 1、PWM信号的定义 PWM信号为脉宽调制信号,其特点在于他的上升沿与下降沿之间的时间宽度。具体的时间宽窄协议参考下列讲述。我们目前使用的舵机主要依赖于模型行业的标准协议,随着机器人行业的渐渐独立,有些厂商已经推出全新的舵机协议,这些舵机只能应用于机器人行业,已经不能够应用于传统的模型上面了。 关于舵机PWM信号的基本样式如下图 其PWM格式注意的几个要点: (1)上升沿最少为,为之间; (2)控制舵机的PWM信号周期为20ms; 2.PWM信号控制精度制定 1 DIV = 8uS ; 250DIV=2mS PWM上升沿函数: + N×DIV 0uS ≤ N×DIV ≤ 2mS ≤ +N×DIV ≤ 3、舵机位置控制方法 舵机的转角达到185度,由于采用8为CPU控制,所以控制精度最大为256份。目 8位AT89C52CPU,其数 据分辨率为256,那么经过 舵机极限参数实验,得到应 该将其划分为250份。 那么的宽度为2mS = 2000uS。 2000uS÷250=8uS 则:PWM的控制精度为8us 我们可以以8uS为单位 递增控制舵机转动与定位。 舵机可以转动185度, 那么185度÷250=度, 则:舵机的控制精度为度

相关文档
最新文档