[应用相关] 基于HAL库的《STM32与迪文DGUS屏通信》项目实战

[复制链接]
5755|98
 楼主| 远芳侵古道 发表于 2022-7-27 19:28 | 显示全部楼层
最后,就是串口参数的配置了,首先开启串口功能引脚的时钟和串口DMA时钟 ,接着,通过引用结构体UART_HandleTypeDef中的成员,达到配置串口参数的目的,配置完成后,初始化UART及初始化中断
 楼主| 远芳侵古道 发表于 2022-7-27 19:30 | 显示全部楼层
 楼主| 远芳侵古道 发表于 2022-7-27 19:31 | 显示全部楼层
这里需要注意的是,在使用定时器中断、串口中断、DMA中断等中断的时候,我们需要在stm32f1xx_it.c文件中添加对应的中断处理程序:
 楼主| 远芳侵古道 发表于 2022-7-27 19:33 | 显示全部楼层
 楼主| 远芳侵古道 发表于 2022-7-27 19:34 | 显示全部楼层
接下来就是main.c里面的代码了,这部分的代码就是整个项目的核心。首先骂我们来看下系统时钟配置:
 楼主| 远芳侵古道 发表于 2022-7-27 19:35 | 显示全部楼层
 楼主| 远芳侵古道 发表于 2022-7-27 19:36 | 显示全部楼层
这里其实也没什么好说的,基本上每个项目中都会用到,而且基本不需要怎么修改,接下来我们来看下跟按键和指示灯相关的这个函数吧,这个也是笔者自己改写的,虽然算不上有多好,但是简单的项目中,还是可以作为一个参考吧:
 楼主| 远芳侵古道 发表于 2022-7-27 19:36 | 显示全部楼层
 楼主| 远芳侵古道 发表于 2022-7-27 19:38 | 显示全部楼层
在这个函数中,主要实现了以下几个功能:

 实时获取每个按键的状态,并在该按键按下后,执行相应的动作,同时,该按键的按键次数加“1”;
 按键按下后,必须松开,才能对下一次按键按下状态进行检测,而这一过程中,通过一个标志位来实现,使得程序不必一直在死等按键松开,不影响其他程序的正常运行;
 实时获取按键和指示灯的状态并将该状态取反,用于发送到迪文DGUS屏上显示状态;
 楼主| 远芳侵古道 发表于 2022-7-27 19:41 | 显示全部楼层
接下来,我们来看下这个数据填充的函数,这个也是自定义的一个函数,用来实时刷新我们要发送的数据:
 楼主| 远芳侵古道 发表于 2022-7-27 19:44 | 显示全部楼层
 楼主| 远芳侵古道 发表于 2022-7-27 19:44 | 显示全部楼层
然后就是另外一个自定义的函数,用来解析串口收到的指令,并且根据接收到的指令,完成相应的动作:
 楼主| 远芳侵古道 发表于 2022-7-27 19:46 | 显示全部楼层
 楼主| 远芳侵古道 发表于 2022-7-27 19:46 | 显示全部楼层
接下来就是一个串口接收完成的回调函数,笔者在这里主要用来做帧校验和接收数据的缓存:
 楼主| 远芳侵古道 发表于 2022-7-27 19:47 | 显示全部楼层
 楼主| 远芳侵古道 发表于 2022-7-27 19:52 | 显示全部楼层
最后,就是一个定时器的回调函数,笔者在这个函数中设置了一个变量用来定时:
141062e126e0a7fd3.png
 楼主| 远芳侵古道 发表于 2022-7-27 19:55 | 显示全部楼层
在所有准备工作就绪后,我们只需要在主函数中调用对应的函数,即可实现我们需要的功能了:
5841062e127b38b65a.png
 楼主| 远芳侵古道 发表于 2022-7-27 19:56 | 显示全部楼层
至此,整个项目的源码部分就完成了,接下来我们只需要将代码下载到开发板中,然后将开发板的串口2跟迪文的DGUS屏连起来,接可以看到效果了:
 楼主| 远芳侵古道 发表于 2022-7-27 19:57 | 显示全部楼层
 楼主| 远芳侵古道 发表于 2022-7-27 20:06 | 显示全部楼层
本例程由『芯知识学堂』SingleYork原创,仅供学习交流使用,转载请注明出处!项目源码下载:STM32与迪文屏通信例程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部