上位机与STM32控制板通信的途径有四种:
一、串口通信(USB转串口)
二、蓝牙
三、WIFI
四、以太网通信
以串口通信为例,设备间的关系图如下:
其中STM32控制板通常分为两块,一块是控制机械装置的驱动板,上面有各种外部接口;另一块是与上位机通信,控制程序逻辑的核心板。两块板子通过引脚连接。
在这其中,STM32控制板驱动电机运动部分的工作属于嵌入式编程,通常用C语言开发。它是指开发者将编译好的程序(二进制代码)导入到板卡芯片上,在板卡上运行程序。板卡上有类似于CPU的处理器,一般叫MCU (Microcontroller Unit ),C语言程序的main函数就是在该芯片上开始运行的,而不是运行在做开发的PC机上。
运行在MCU上的程序通过控制加给板卡上针脚的高电平或低电平,来控制连接该针脚的电机的运动。
另一方面,嵌入式程序还需要增加一部分代码,用以和上位机进行串口通信,来接收上位机下发的指令。它主要通过一个叫做USART(Universal Synchronous/Asynchronous Receiver/Transmitter) 的通信协议来与上位机通信。
板卡上的程序写好之后,上位机的程序就比较好办了,你可以选用任何支持串口通信的语言,在本文的例子中,我们主要采用C++来进行演示。
开发环境的准备
硬件方面,需要的材料有:
上位机:PC机一台,性能以能够安装visual studio 2017/2019(或其他版本),安装Keil uVision4/5即可。
控制器驱动板:上面有各种接口,例如PWM舵机/总线舵机接口,LED灯接口,蓝牙,红外,手柄接口等等,取决你想要开发的项目内容。例如你可以在淘宝上搜“舵机驱动器”或“舵机控制板”,但要记住,你必须选择与其匹配的STM32控制板。通常来说,最好和STM32控制板成套一起购买,以保证其兼容性。
STM32控制板:由于要与上位机进行串口通信,所以板子必须搭载类似CH340这种USB与串口软件的芯片。当然,还必须有micro USB接口,并且和上面选配的驱动板兼容,如果针脚数量都不一样,那肯定是接不上去的。
电机/机构:由控制板控制进行运动的机械装置,也可以是LED灯,显示屏等,用以验证你写的程序是否符合预期。如果你打算做机械臂/机器人编程,则需要选用舵机。
其他:包括连接上位机与控制板的micro USB线(注意选用支持串口通信的型号),给控制板提供电源的电源适配器和对接线等等。
这里硬件最好的办法是在淘宝上搜索对应的开发套装一整购买,比如机械臂开发,或者智能小车等等,因为这里面有很多琐碎的零件,如果单独购买,到时候哪怕缺一根线或者一个齿轮都很烦,很影响开发效率。
但是网上成套购买的开发套件也有个问题,就是很多套件是没有调试功能的,不知道是成本控制还是什么原因,他们提供的STM32的控制板没有调试功能(不带连接STLINK仿真器的接口),这就很坑了,要知道嵌入式开发如果不能调试的话,那跑起来真是两眼一抹黑,连个输出窗口都没有,程序在哪出错也不知道,属于完全盲写)。所以一定要跟商家咨询清楚。
接下来我们再来说软件。软件环境的准备主要是指开发工具的安装配置,以及驱动的安装,这些方面的内容网上已经有很多,说得很详细易懂了,所以我这里不再多说废话。
Visual studio 2019:用于上位机的串口通信的代码开发与调试
Keil uVision4/5:用于开发嵌入式代码,使用C语言。
CH340驱动:如果你使用的是windows操作系统,可使用随板卡交付的驱动程序安装包,或者网上搜索下载。linux系统的驱动我没有研究过,需要你自己找资料了。
其他准备工作。
软件和硬件准备好了之后,接下来就是将各系统组装连接起来,以及做一些初始化工作。包括:
给板卡接通电源:请参考具体板卡的供应商提供的指导
初始化硬件:如果是舵机之类的驱动器,需要将舵机归零,以防止堵转。
连接STM32控制板与上位机。
以上就是开发环境的准备工作。
嵌入式开发环境介绍
这里只是给非专业的人员一点入门知识,如果你是专业人士,就没有看下去的必要了。
首先,第一步在 Keil uVision上创建项目,新建c源文件和头文件,编写你的代码。程序是从main函数开始执行的,关于如何在 Keil uVision开发C语言程序,可在网上搜索教程,最好的办法是使用随板卡附送的源代码项目作为你开始的第一个项目,这样能够快速上手。
第二步,编译程序。
第三步,将程序导入(烧录)到板卡上。使用FlyMcu.exe这样的工具来烧录程序,一般源代码都会自带这样的工具,可设置烧录完成后程序是否立即执行,或者是在板卡断电重启之后,程序即会执行。
以上是上位机通信编程的准备工作,内容还是挺多的,如果你要全部自己弄出来,只怕最少要花好几天。如果你已经全部准备完成,并且自己写好了C语言程序导入到板卡上成功跑了起来——点亮了一个LED灯/驱动了机械臂,而且与上位机通信的usart.c代码也写好了——那么下一篇我们将开始介绍一个上位机串口编程的实例。