整个作品是实现一个基于STM32的一个车位管理系统,它实现了以下功能:智能控制栏杆、烟雾警报、实时车位状态信息显示、推荐停车位、停车计时、进出车辆检测计数、车牌识别、上位机的实时显示时间、上位机记录车辆进出时间。
测试的视频见附件中的百度云链接。
上位机是使用LabVIEW软件进行设计编辑的,它用来进行无线传输信息并进行处理显示。其设计后的上位机界面如下:
硬件的连接实物图如下:
硬件有:6个红外蔽障模块、2个SG90舵机、2个OV7725摄像头、1个烟雾传感器模块、1个TFT液晶屏、1个ESP8266、1块STM32f103ZET6最小系统模块。
作品的软件设计使用RTT系统,线程之间通讯采用了:信号量、消息队列、事件集;本作品也使用了二个软件定时器,一个用于检测模块的状态,另一个是用于更新车位信息。
作品的程序流程如下图:
如图可得,系统所需的线程通讯方式以及软件定时器,因此我定义了以下几种线程通讯方式和软件定时器的控制指针:
在Parking_detection_processing.c中定义:
static rt_mq_t button_mq = RT_NULL;//消息队列的控制块
在Task.c中定义:
static rt_timer_t Inspection_ProcessSoftTimer = RT_NULL;//软件定时器控制块指针
static rt_thread_t message_thread;//定义线程控制块指针
在config.h中定义:
EXT rt_sem_t exit_recv_sem;//定义出口信号量控制块指针
EXT rt_sem_t entr_recv_sem;//定义入口信号量控制块指针
EXT rt_event_t Inspection_event;//定义事件控制块指针
EXT rt_timer_t In_ProcessSoftTimer;//软件定时器控制块指针
从图中还可以知道作品的程序中要创建6个线程,我定义了以下6个线程入口函数:
static void IWDG_thread_entry (void *parameter);//看门狗线程入口函数
static void Event_thread_entry (void *parameter);//切换成车位信息显示的线程入口函数
static void exit_thread_entry (void *parameter);// 有车要驶出的线程入口函数
static void entr_thread_entry (void *parameter);// 有车要驶入的线程入口函数
static void WIFI_thread_entry (void *parameter);//连接WIFI、本地服务器的线程入口函数
void button_thread_entry(void *parameter)//用户消息处理入口函数
由于红外蔽障模块和烟雾传感器模块的使用与按键方式一样,因此这里采纳了何老师的按键消抖方法。
综上所述,我要创建的线程、及线程通讯方式以及软件定时器的具体情况就一目了然了。其中连接WIFI、本地服务器的线程入口函数采用有限次循环模式,其余线程入口函数采用无限循环模式。具体的代码见附件源码。
在此,我讲一下为什么其中在调用车位检测以及车位信息更新函数的定时器需要暂停?
这是因为车位检测以及车位信息更新函数中滞留车辆数目与累计使用车位(含已被推荐)进行比较,如果滞留车辆数目小于累计使用车位(含已被推荐)时会进行推荐车位的标记清除掉一部分使得两者相等。由于有车要驶入的线程入口函数中要推荐停车位时(推荐停车位是在车牌识别结束后显示给车主看),而滞留车辆数目还未增加(滞留车辆数目增加是在舵机升起后增加),此时调用车位检测以及车位信息更新函数就会把之前推荐车位的标记清除了,因此需要合理对该定时器短暂的暂停。这个目的是为了防止有车辆不按照推荐停车位停放,而导致车位浪费。
使用RTT系统的心得:
相对于裸机的代码编辑的逻辑相对要简单,而且相对裸机要清晰明了。
在移植过程中出现的问题有以下几点:
1.线程创建时给予的栈大小不够,导致系统崩溃
2.LCD_Init 放在sysinit中调用,导致系统卡死。因为LCD_Init()初始化函数中包含rt_thread_mdelay()函数,而在rt_thread_mdelay()函数中包含系统调度,所以如果将LCD_Init 放在sysinit中调用。而sysinit是在board.c中调用,此时操作系统调度器未启用,而使用rt_thread_mdelay()函数,导致卡死。
上位机源码:链接:https://pan.baidu.com/s/12s1BxUXLDcQQeA45v25Rgw
提取码:ar18
。。。 发表于 2020-4-21 17:54
源码链接:链接:https://pan.baidu.com/s/1LyTWCIXDkDXwKiEYx0e_9Q
提取码:zv07
。。。 发表于 2020-5-12 15:17
不好意思,原先分享的源码我不小心给删了。
源码链接:链接:https://pan.baidu.com/s/12s1BxUXLDcQQeA45 ...
感谢