【RT-Thread作品秀】EE-Lab
作者:卿俊成
概述
隨著集成電路的不斷發(fā)展,電子測量儀器分別向著高性能和微型化不斷發(fā)展。本作品基于微型化便攜式需求,設(shè)計一個集成數(shù)字電源、信號發(fā)生器、示波器的便攜式電子測量儀器。
開發(fā)環(huán)境
硬件:ART-Pi開發(fā)板、2.8‘SPI TFT屏幕(ILI9341)、AD9833模塊、自制擴(kuò)展板(由于設(shè)計失誤,無法使用)
RT-Thread版本: RT-Thread Nano(V3.1.3)
開發(fā)工具及版本:STM32CubeMX(V6.1.0)、HAL庫(H7_V1.8.0)、Keil/MDK(V5.33.0.0)
RT-Thread使用情況概述
本應(yīng)用使用Nano版RT-Thread,因此只使用了內(nèi)核部分。
本應(yīng)用使用信號量作為DMA分批通過SPI刷屏的屏幕數(shù)據(jù),在中斷中釋放信號量,用于分批刷屏的同步。
本應(yīng)用使用Finsh組件作為無GUI情況下的數(shù)據(jù)查看方式,及命令行方式對AD9833模塊及定時器的操作方式。
硬件框架
電腦端通過Putty軟件與ART-Pi開發(fā)板的Finsh組件通信,實現(xiàn)控制功能。
SPI TFT屏幕模塊由開發(fā)板的SPI4總線控制,作為波形顯示界面。
AD9833信號發(fā)生模塊由開發(fā)板通過模擬SPI控制,作為信號發(fā)生器。
信號測試夾用于外部電壓輸入,作為示波器的源信號。
由于自制擴(kuò)展板存在問題,不在此介紹,但附上立創(chuàng)eda工程的在線鏈接: https://oshwhub.com/OneToken/art-pi-ee-tools
軟件框架說明
Finsh組件通過與電腦端交互,控制TIM15的預(yù)裝載值,達(dá)到通過控制TIM15觸發(fā)DMA_ADC轉(zhuǎn)換的采樣頻率,并在顯存對應(yīng)位置打點,實現(xiàn)示波器功能。同時還可以控制AD9833產(chǎn)生頻率不同的三角波、正弦、方波。
屏幕的刷新,由DMA1通道0將內(nèi)部預(yù)先分配好的顯存數(shù)據(jù)搬運至SPI移位寄存器,從而發(fā)送至ILI9341,實測頻率60Mbit的情況下可以完美刷新,實現(xiàn)了高速刷屏的功能。
軟件模塊說明
DMA傳輸ADC數(shù)據(jù)框圖
通過定時器15觸發(fā)DMA1通道1將ADC數(shù)據(jù)循環(huán)采集至指定內(nèi)存處,實現(xiàn)示波器數(shù)據(jù)采集功能。
SPI通過DMA方式刷屏功能框圖
理想情況下的刷屏方式
受到DMA一次傳輸數(shù)據(jù)數(shù)目uint16_t也就是65535的限制,無法一次性完成顯存刷新至屏幕,因此分成三個數(shù)據(jù)包,依次順序傳輸,使用信號量作為同步信號。
最終實現(xiàn)的刷屏方式
演示效果
演示視頻:
比賽感悟
通過本次比賽,極大程度上熟悉了H7系列開發(fā)板,特別是大量參考了安富萊提供的教程,了解了H7的多域設(shè)計,RAM的分布式設(shè)計以及指定存儲位置,DMA通信只能用于特定的RAM區(qū)和特定的外設(shè)之間,若RAM區(qū)域使用最高性能的DTM區(qū),則大部分DMA通信都無法使用。在決定使用RT-Thread Nano之前,嘗試使用RT-Thread完整版,按照完整版的流程注冊SPI設(shè)備并且使用時,發(fā)現(xiàn)無法驅(qū)動SPI液晶屏,使用邏輯分析儀抓取信號也沒啥問題,因此才換成RT-Thread Nano。
通過本次的小作品,比較深入的理解了RTOS的作用,特別是用于線程同步時,阻塞下來,等待中斷釋放信號量的方式,使得分段DMA SPI刷屏也能毫無感知延時的連續(xù)刷新。