前言

首先这是我的综合电子创新设计的课设,我选择了基于STM32的出租车计价器作为我的课设项目。虽然我已经初步完成了该项目的硬件搭建和软件编程,但深知在代码实现和整体设计上仍有诸多待完善的地方。这个项目不仅是对我学习STM32应用的一次重要时间,也是对我的电子设计能力的一次全面挑战。在接下来的博客中,我将分享我在设计出租车计价器过程中遇到的问题,解决方案以及我的一些思考,同时也期待同行们的建议和指正。

为什么做出租车计价器

主要是因为老师让我们选的题目之一,我们小组就选择了出租车计价器,我主要负责硬件和软件的设计,其他小组成员帮我写ppt和查找资料。

一、项目文件说明

代码已经托管在Gitee和Github中:

Gitee

Github

1.1 Firmware

Firmware文件夹是整个项目的固件,即包含了该项目的完整的代码,如果硬件设计一致,可以直接下载使用。非常方便。此外开发环境并不是cubeMX+keil,而是cubeMX+Clion,所以可能需要迁移项目至keil,或者直接像我一样使用Clion开发stm32。这里也给出用Clion开发stm32的一篇教程:配置CLion用于STM32开发【优雅の嵌入式开发】 具体的配置直接打开.ioc文件就知道了

1.2 Bootloader

Bootloader文件夹是项目的固件引导,即可以实现IAP升级的固件,但是由于时间和技术的原因,该文件夹的代码未能实现,只是创建了一个工程。同样也是使用Clion开发的。主要是我的Firmware编译出来的.bin文件大约有152KB,所以直接传输给STM32会溢出,所以要采用流式传输给STM32,这里还没有实现。

硬件架构

该项目的硬件使用的是STM32F103VET6作为控制器,因为有512KB的FLASH和64KB的RAM,可以说对于本项目来说是够用的,Firmware编译出来的固件达到了152KB,所以使用其他控制器时,应该大于152KB。 当然我并没有自己设计PCB,而是直接使用了现成的模块,所以我的STM32是使用了魔女的开发板(不是广告)。链接

因为手头上有这个开发板,就使用这个开发板,只是为了能够完成课设。此外屏幕是是2.8寸的触摸屏,其主控芯片为ILI9341,使用FSMC来控制它。然后我的屏幕被同学压出了三条缝,所幸还可以正常显示,就是触摸没有了。

然后就是电机模拟出租车的正常行驶,我这里使用了马达和马盘以及光耦测速模块,这里可以替换成带有编码器的电机,再加上电机驱动。我这里是马达直接使用开发板的5V供电就没有使用电机驱动,但还是得注意电机的过流问题。

本项目还使用了SD卡,我使用的SD卡是32G容量的。

程序说明

系统初始化的时候,会创建一个以默认参数的config.txt,保存在system目录下,通过读取SD卡可以修改系统的相关参数。但也没啥参数,就保存了日期和价格,以及串口的用户名和密码(这个并没有实现,连接串口后直接发命令即可,无需验证用户名和密码)。

该项目的程序使用了cJSON库,所以编译的时候需要加入cJSON库的编译,并且使用了中间件FATFS文件系统,以及USB设备。USB设备根据.ioc就知道,是一个大容量的存储设备,主要是为了能够不拔卡就可以访问SD卡里的内容(这里不是很完善,有点小bug,有出现电脑识别不了USb设备的情况)。

当开始计价的时候,定时器4就会开始工作,每1s进行一次速度和里程的计算,然后计价结束后,定时器4的中断就会被关闭,然后创建一个订单文件以.txt形式保存,内容是以JSON格式进行保存,方便读取和存储。我也尝试了一下使用.json的拓展名,但是好像Fatfs文件系统并不支持,所以使用了.txt扩展名。