远芳侵古道 发表于 2022-7-27 18:00

基于HAL库的《STM32与迪文DGUS屏通信》项目实战

大家好,我是『芯知识学堂』的SingleYork!前面一直都有在写51单片机跟迪文DGUS屏的串口通信例程,然后就有好多小伙伴们加入到了我的Q群里来咨询STM32与迪文DGUS屏的例程,由于时间关系,笔者一直没能写这方面的例程,正好最近做项目要用到STM32,因而在验证项目功能的同时,顺便写了一下STM32与迪文DGUS屏通信的这个例程。

要说STM32的串口通信,相信很多人都比我熟悉的多了,笔者纯粹就是个菜鸟,在看了硬石团队的一些视频之后,对STM32有了大致的了解,然后,尝试移植硬石的例程到自己的项目中,庆幸的是,硬石团队的例程写的真心不错,个人比较喜欢他们的代码风格,而且还是基于HAL库,移植起来也是非常的方便。

玛尼玛尼哄 发表于 2022-7-27 18:04

望楼主多分享,大家一起学习

远芳侵古道 发表于 2022-7-27 18:16

远芳侵古道 发表于 2022-7-27 18:21

从上面的图片中,我们大致可以看到该例程使用的一些硬件资源:

 LED的控制
 按键检测
 串口通信
 基本定时器

远芳侵古道 发表于 2022-7-27 18:21

该例程的硬件环境,是原子的《战舰V3开发板》,这款开发板还是笔者好2016年用《电子芯吧客(原:云汉电子社区)》论坛的年终奖兑换的,当然咯,屏幕和别的模块,是笔者后面自己买的:

远芳侵古道 发表于 2022-7-27 18:22

虽然硬件采用的是原子的战舰V3,但是笔者还是不太习惯用STM32的标准库来做项目,毕竟笔者对STM32的标准库是不怎么懂的,由于笔者之前使用了硬石的开发板,然后对HAL有了一定的了解,所以在该例程中使用了目前比较流行的HAL库来进行开发,然后,一些配置部分,是从《硬石F103开发板》上 移植过来的。

远芳侵古道 发表于 2022-7-27 18:24

那么,接下来,我们就来详细介绍一下代码部分吧。先来看个最简单的“bsp_led.h”中的代码吧:

远芳侵古道 发表于 2022-7-27 18:25

远芳侵古道 发表于 2022-7-27 18:26

首先,定义的是一个枚举类型LEDState_TypeDef,用来表示LED的三种状态,即:亮、灭和状态反转,然后就是几个宏定义用来检查输入参数的合法性。后面部分就是定义每个LED对于的GPIO口。笔者比较菜,也是在接触了硬石开发板之后,才学会了这种定义的方法,这样做的好处,不仅是为了让程序布局美观,更重要的是可以方便移植,当做别的项目的时候,只需要将定义的GPIO及其对应的时钟替换成项目中所使用的就可以了。

远芳侵古道 发表于 2022-7-27 18:27

接下来就是”bsp_led.c”里面的代码了:

远芳侵古道 发表于 2022-7-27 18:28

远芳侵古道 发表于 2022-7-27 18:29

这里面主要就是两个函数,一个就是上图中的这个GPIO初始化函数,这个函数主要就是对GPIO口的时钟、模式、速度等参数的配置。另外一个函数,就是用来控制输出LED的状态,即:亮、灭及状态反转,如下图所示:

远芳侵古道 发表于 2022-7-27 18:29

远芳侵古道 发表于 2022-7-27 18:30

接下来,我们来看另一个头文件bsp_key.h,这个文件跟之前的bsp_led.h的功能类似,这里也主要是用来定义KEY0、KEY1、KEY2三个按键具体使用的哪个GPIO口,还有其他的一些定义,功能比较简单,笔者就不多说了,一看代码就很清楚了:

远芳侵古道 发表于 2022-7-27 18:31

远芳侵古道 发表于 2022-7-27 18:33

接下来就是bsp_key.c文件了,这里主要也是两个功能,一个是跟按键相关的GPIO口的初始化函数:

远芳侵古道 发表于 2022-7-27 18:36

远芳侵古道 发表于 2022-7-27 18:41

另一个则是按键状态的读取函数:

远芳侵古道 发表于 2022-7-27 18:41

远芳侵古道 发表于 2022-7-27 18:42

关于这个按键读取的函数,笔者在这里做了修改,而并非直接使用硬石团队提供的c文件,硬石团队提供的例程源码如下:
页: [1] 2 3 4 5
查看完整版本: 基于HAL库的《STM32与迪文DGUS屏通信》项目实战