【RT-Thread作品秀】EE-Lab
作者:卿俊成
概述
随着集成电路的不断发展,电子测量仪器分别向着高性能和微型化不断发展。本作品基于微型化便携式需求,设计一个集成数字电源、信号发生器、示波器的便携式电子测量仪器。
开发环境
硬件:ART-Pi开发板、2.8‘SPI TFT屏幕(ILI9341)、AD9833模块、自制扩展板(由于设计失误,无法使用)
RT-Thread版本: RT-Thread Nano(V3.1.3)
开发工具及版本:STM32CubeMX(V6.1.0)、HAL库(H7_V1.8.0)、Keil/MDK(V5.33.0.0)
RT-Thread使用情况概述
本应用使用Nano版RT-Thread,因此只使用了内核部分。
本应用使用信号量作为DMA分批通过SPI刷屏的屏幕数据,在中断中释放信号量,用于分批刷屏的同步。
本应用使用Finsh组件作为无GUI情况下的数据查看方式,及命令行方式对AD9833模块及定时器的操作方式。
硬件框架
电脑端通过Putty软件与ART-Pi开发板的Finsh组件通信,实现控制功能。
SPI TFT屏幕模块由开发板的SPI4总线控制,作为波形显示界面。
AD9833信号发生模块由开发板通过模拟SPI控制,作为信号发生器。
信号测试夹用于外部电压输入,作为示波器的源信号。
由于自制扩展板存在问题,不在此介绍,但附上立创eda工程的在线链接: https://oshwhub.com/OneToken/art-pi-ee-tools
软件框架说明
Finsh组件通过与电脑端交互,控制TIM15的预装载值,达到通过控制TIM15触发DMA_ADC转换的采样频率,并在显存对应位置打点,实现示波器功能。同时还可以控制AD9833产生频率不同的三角波、正弦、方波。
屏幕的刷新,由DMA1通道0将内部预先分配好的显存数据搬运至SPI移位寄存器,从而发送至ILI9341,实测频率60Mbit的情况下可以完美刷新,实现了高速刷屏的功能。
软件模块说明
DMA传输ADC数据框图
通过定时器15触发DMA1通道1将ADC数据循环采集至指定内存处,实现示波器数据采集功能。
SPI通过DMA方式刷屏功能框图
理想情况下的刷屏方式
受到DMA一次传输数据数目uint16_t也就是65535的限制,无法一次性完成显存刷新至屏幕,因此分成三个数据包,依次顺序传输,使用信号量作为同步信号。
最终实现的刷屏方式
演示效果
演示视频:
比赛感悟
通过本次比赛,极大程度上熟悉了H7系列开发板,特别是大量参考了安富莱提供的教程,了解了H7的多域设计,RAM的分布式设计以及指定存储位置,DMA通信只能用于特定的RAM区和特定的外设之间,若RAM区域使用最高性能的DTM区,则大部分DMA通信都无法使用。在决定使用RT-Thread Nano之前,尝试使用RT-Thread完整版,按照完整版的流程注册SPI设备并且使用时,发现无法驱动SPI液晶屏,使用逻辑分析仪抓取信号也没啥问题,因此才换成RT-Thread Nano。
通过本次的小作品,比较深入的理解了RTOS的作用,特别是用于线程同步时,阻塞下来,等待中断释放信号量的方式,使得分段DMA SPI刷屏也能毫无感知延时的连续刷新。