打印
[应用相关]

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

[复制链接]
楼主: 远芳侵古道
手机看帖
扫描二维码
随时随地手机跟帖
21
远芳侵古道|  楼主 | 2022-7-27 18:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
远芳侵古道|  楼主 | 2022-7-27 18:43 | 只看该作者
可以看到,硬石团队提供的源码跟大部分单片机的按键例程基本都类似,在按键按下后就一直在那死等按键松开,这个时候我们会发现,在按键按下而又没有松开的时候,程序会一直在那死等,别的事情都做不了,这样的方式,如果仅仅是实验或者说是学习,勉强还能凑合着用,但是,在实际的项目应用中是没多大用处的,所以笔记进行了一些小的修改,可以让我们既能方便的获取到按键的按下和谈起两种状态,又不必在那死等。当然咯,像这种扫描的方式,最好的办法那就是使用状态机了,网上也有很多的跟状态机相关的例程,感兴趣的小伙伴们也可以自行修改例程,如果不想自己去修改,那么笔者这种比较笨的办法,相信也能适应大部分场合了吧。除了扫描的方式,还有一种就是中断的方式,不过也不难,就留给读者们去自由发挥了吧

使用特权

评论回复
23
远芳侵古道|  楼主 | 2022-7-27 18:44 | 只看该作者
接下来就是定时器相关的代码了,该例程中,定时器主要是用来设定一个时间让串口定时发送数据到迪文的DGUS屏上。笔者这里也是从硬石的例程中直接移植过来的,几乎也没做什么修改,这里使用的是基本定时器2,设置的定时器预分频系数为71,定时器周期为1000,即定时器每1ms产生一次中断,bsp_GeneralTIM.h代码如下:

使用特权

评论回复
24
远芳侵古道|  楼主 | 2022-7-27 18:44 | 只看该作者

使用特权

评论回复
25
远芳侵古道|  楼主 | 2022-7-27 18:46 | 只看该作者
至于bsp_GeneralTIM.c文件,也是基本没做修改,在这个文件中,主要实现了三个功能,即:定时器的初始化、定时器硬件初始化配置、定时器反初始化配置:

使用特权

评论回复
26
远芳侵古道|  楼主 | 2022-7-27 18:47 | 只看该作者

使用特权

评论回复
27
远芳侵古道|  楼主 | 2022-7-27 18:49 | 只看该作者
这个定时器反初始化函数的作用就是当不用这个串口外设的时候可以调用,将外设,或者引脚或者其他一些东西恢复默认值。

使用特权

评论回复
28
远芳侵古道|  楼主 | 2022-7-27 18:50 | 只看该作者

使用特权

评论回复
29
远芳侵古道|  楼主 | 2022-7-27 18:51 | 只看该作者
接下来,我们就要来看下本项目的重点部分了,那就是串口通信部分的软件设计。笔者这里使用的是串口2,这也是为了配合原子的战舰V3开发板的硬件接口,串口2的数据发送,是利用DMA来实现的,我们先来看下bsp_usartx.h文件中代码:

使用特权

评论回复
30
远芳侵古道|  楼主 | 2022-7-27 18:52 | 只看该作者

使用特权

评论回复
31
远芳侵古道|  楼主 | 2022-7-27 18:54 | 只看该作者
该文件中主要是跟串口相关的宏定义以及一些变量和函数的声明,这里使用宏定义,也是为了方便我们更新、修改和移植程序。眼尖的小伙伴们或许会有个疑问,为什么这里我们要选择DMA1的通道7来作为USART2的数据发送而不是别的通道呢?其实,这里也不是随便选的,而是通过查看《STMF10xxx编程手册》得知的,如下图所示:

使用特权

评论回复
32
远芳侵古道|  楼主 | 2022-7-27 18:57 | 只看该作者

使用特权

评论回复
33
远芳侵古道|  楼主 | 2022-7-27 18:58 | 只看该作者
接下来我们再来看bsp_usart.c文件的内容,首先是串口DMA传输初始化函数:

使用特权

评论回复
34
远芳侵古道|  楼主 | 2022-7-27 19:02 | 只看该作者

使用特权

评论回复
35
远芳侵古道|  楼主 | 2022-7-27 19:12 | 只看该作者
这个函数中,前面部分主要是USART2相关的引脚相关参数的配置,后面部分就是DMA外设的各项参数的设定,需要注意以下几点:

 传输方向需设定为存储器到外设的方向;
 外设地址自增不使能,因为USART有固定的DMA通道,USART数据寄存器的地址也是固定的;
 存储器使用自动递增,并采用常规发送模式,因为这个项目中,笔者使用了定时器来定时发送数据,并不需要DMA一直自动循环发送数据。

使用特权

评论回复
36
远芳侵古道|  楼主 | 2022-7-27 19:14 | 只看该作者
接下来就是一个串口硬件反初始化函数,这个函数的作用就是当不用这个串口外设的时候可以调用,将外设,或者引脚或者其他一些东西恢复默认值:

使用特权

评论回复
37
远芳侵古道|  楼主 | 2022-7-27 19:16 | 只看该作者

使用特权

评论回复
38
远芳侵古道|  楼主 | 2022-7-27 19:26 | 只看该作者
接下来,就是中断配置函数,这里我们只需要设定中断优先级,然后使能中断即可:

使用特权

评论回复
39
远芳侵古道|  楼主 | 2022-7-27 19:27 | 只看该作者

使用特权

评论回复
40
远芳侵古道|  楼主 | 2022-7-27 19:28 | 只看该作者
最后,就是串口参数的配置了,首先开启串口功能引脚的时钟和串口DMA时钟 ,接着,通过引用结构体UART_HandleTypeDef中的成员,达到配置串口参数的目的,配置完成后,初始化UART及初始化中断

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则