2021-11-24 00:33:04 索煒達(dá)電子 935
項(xiàng)目編號(hào):E2434
文件大?。?73K
源碼說(shuō)明:帶中文注釋
開(kāi)發(fā)環(huán)境:C編譯器
簡(jiǎn)要概述
內(nèi)容:在顯示屏上通過(guò)按鍵產(chǎn)生正弦波、三角波、矩形波、鋸齒波,并且能通過(guò)按鍵來(lái)暫停波形,顯示靜態(tài)波形,并且顯示波形電壓的峰峰值。
一、波形圖顯示
生成正弦波、三角波、矩形波、鋸齒波數(shù)據(jù)
將這些數(shù)據(jù)顯示到 TFT 2.4 寸液晶屏上
思路:用數(shù)組 1,2,3,4 分別保存正弦波、三角波、矩形波、鋸齒波數(shù)據(jù),寫(xiě)按鍵函數(shù)分別打印不同的數(shù)組內(nèi)容,然后再將數(shù)組內(nèi)容打印到 TFT 液晶屏上。
二、峰峰值顯示
從數(shù)組中采集最大和最小值,然后做差求得峰峰值,顯示到 TFT 液晶屏上。
優(yōu)化:使用 DMA 來(lái)減輕 CPU 的負(fù)擔(dān),提高數(shù)據(jù)傳輸速度。
STM32 使用 DMA+DAC+TIMER 輸出正弦波
那么對(duì)于使用 DMA+DAC+TIMER 產(chǎn)生正弦波的原理或過(guò)程,我有這樣一個(gè)簡(jiǎn)單的理解:先將一個(gè)可以生成正弦波的數(shù)據(jù)表保存在靜態(tài)內(nèi)存中,然后在 DAC 以及這塊內(nèi)存中間使用 DMA 建立一個(gè)通道,經(jīng)過(guò)以上步驟之后,DAC 模塊就可以通過(guò) DMA 通道拿取靜態(tài)內(nèi)存中可以生成正弦波的數(shù)據(jù),拿取數(shù)據(jù),然后經(jīng)過(guò)數(shù)模準(zhǔn)換,在引腳進(jìn)行輸出就可以得到正弦波了。那么當(dāng)然,這個(gè)速度是非常快的,如果沒(méi)有一定的延時(shí),那么得到的估計(jì)就是一個(gè)變化很快的模擬量。所以這個(gè)時(shí)候就需要使用定時(shí)器 TIMER 了。DAC 在初始化的時(shí)候,可以設(shè)置成使用定時(shí)器觸發(fā),這就意味著,當(dāng)定時(shí)器溢滿的時(shí)候,就會(huì)觸發(fā) DAC 工作。這樣一來(lái),就可以通過(guò)改變定時(shí)器的定時(shí)時(shí)間來(lái)改變正弦波的周期了。電壓大小的顯示用 DAC 來(lái)處理。(PA4 和 PA5 短接,DAC 與 ADC 結(jié)合。)
目錄│文件列表:
└ stm32f407-oscilloscope
├ CORE
│ │ core_cm4.h
│ │ core_cm4_simd.h
│ │ core_cmFunc.h
│ │ core_cmInstr.h
│ └ startup_stm32f40_41xxx.s
├ FWLIB
│ ├ inc
│ │ │ misc.h
│ │ │ stm32f4xx_adc.h
│ │ │ stm32f4xx_can.h
│ │ │ stm32f4xx_crc.h
│ │ │ stm32f4xx_cryp.h
│ │ │ stm32f4xx_dac.h
│ │ │ stm32f4xx_dbgmcu.h
│ │ │ stm32f4xx_dcmi.h
│ │ │ stm32f4xx_dma.h
│ │ │ stm32f4xx_dma2d.h
│ │ │ stm32f4xx_exti.h
│ │ │ stm32f4xx_flash.h
│ │ │ stm32f4xx_flash_ramfunc.h
│ │ │ stm32f4xx_fmc.h
│ │ │ stm32f4xx_fsmc.h
│ │ │ stm32f4xx_gpio.h
│ │ │ stm32f4xx_hash.h
│ │ │ stm32f4xx_i2c.h
│ │ │ stm32f4xx_iwdg.h
│ │ │ stm32f4xx_ltdc.h
│ │ │ stm32f4xx_pwr.h
│ │ │ stm32f4xx_rcc.h
│ │ │ stm32f4xx_rng.h
│ │ │ stm32f4xx_rtc.h
│ │ │ stm32f4xx_sai.h
│ │ │ stm32f4xx_sdio.h
│ │ │ stm32f4xx_spi.h
│ │ │ stm32f4xx_syscfg.h
│ │ │ stm32f4xx_tim.h
│ │ │ stm32f4xx_usart.h
│ │ └ stm32f4xx_wwdg.h
│ └ src
│ │ misc.c
│ │ stm32f4xx_adc.c
│ │ stm32f4xx_can.c
│ │ stm32f4xx_crc.c
│ │ stm32f4xx_cryp.c
│ │ stm32f4xx_cryp_aes.c
│ │ stm32f4xx_cryp_des.c
│ │ stm32f4xx_cryp_tdes.c
│ │ stm32f4xx_dac.c
│ │ stm32f4xx_dbgmcu.c
│ │ stm32f4xx_dcmi.c
│ │ stm32f4xx_dma.c
│ │ stm32f4xx_dma2d.c
│ │ stm32f4xx_exti.c
│ │ stm32f4xx_flash.c
│ │ stm32f4xx_flash_ramfunc.c
│ │ stm32f4xx_fmc.c
│ │ stm32f4xx_fsmc.c
│ │ stm32f4xx_gpio.c
│ │ stm32f4xx_hash.c
│ │ stm32f4xx_hash_md5.c
│ │ stm32f4xx_hash_sha1.c
│ │ stm32f4xx_i2c.c
│ │ stm32f4xx_iwdg.c
│ │ stm32f4xx_ltdc.c
│ │ stm32f4xx_pwr.c
│ │ stm32f4xx_rcc.c
│ │ stm32f4xx_rng.c
│ │ stm32f4xx_rtc.c
│ │ stm32f4xx_sai.c
│ │ stm32f4xx_sdio.c
│ │ stm32f4xx_spi.c
│ │ stm32f4xx_syscfg.c
│ │ stm32f4xx_tim.c
│ │ stm32f4xx_usart.c
│ └ stm32f4xx_wwdg.c
├ HARDWARE
│ ├ ADC
│ │ │ adc.c
│ │ └ adc.h
│ ├ BEEP
│ │ │ beep.c
│ │ └ beep.h
│ ├ DAC
│ │ │ dac.c
│ │ └ dac.h
│ ├ KEY
│ │ │ key.c
│ │ └ key.h
│ ├ LCD
│ │ │ FONT.H
│ │ │ lcd.c
│ │ └ lcd.h
│ ├ LED
│ │ │ led.c
│ │ └ led.h
│ ├ TIMER
│ │ │ timer.c
│ │ └ timer.h
│ └ TOUCH
│ │ rtouch.c
│ └ rtouch.h
├ OBJ
│ └ LCD.hex
├ SYSTEM
│ ├ delay
│ │ │ delay.c
│ │ └ delay.h
│ ├ sys
│ │ │ sys.c
│ │ └ sys.h
│ └ usart
│ │ usart.c
│ └ usart.h
└ USER
│ JLinkSettings.ini
│ LCD.uvoptx
│ LCD.uvprojx
│ main.c
│ stm32f4xx.h
│ stm32f4xx_conf.h
│ stm32f4xx_it.c
│ stm32f4xx_it.h
│ system_stm32f4xx.c
│ system_stm32f4xx.h
│ waveform.c
└ waveform.h