|
本程序用的是STM32F103RC芯片,ADC用DMA方式獲取ADC數據。
本實驗將實現如下功能:利用STM32的ADC1通道0來采樣外部電壓值,并在TFTLCD模塊上顯示出來。實現一個簡單的電壓表的功能。
本實驗可以SWD下載仿真.
- //////////////////////////////////////////////////////////////////////////////////
- #include "dma.h"
- u16 DMA1_MEM_LEN;//保存DMA每次數據傳送的長度
- //DMA1的各通道配置
- //這里的傳輸形式是固定的,這點要根據不同的情況來修改
- //從存儲器->外設模式/8位數據寬度/存儲器增量模式
- //DMA_CHx:DMA通道CHx
- //cpar:外設地址
- //cmar:存儲器地址
- //cndtr:數據傳輸量
- void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
- {
- u32 DR_Base; //做緩沖用,不知道為什么.非要不可
- RCC->AHBENR|=1<<0;//開啟DMA1時鐘
- __nop(); //等待 DMA1 時鐘穩定
- __nop(); //經測試最少 2 個 nop
- __nop();
- DR_Base=cpar;
- DMA_CHx->CPAR=DR_Base; //DMA1 外設地址
- DMA_CHx->CMAR=(u32)cmar; //DMA1,存儲器地址
- DMA1_MEM_LEN=cndtr; //保存DMA傳輸數據量
- DMA_CHx->CNDTR=cndtr; //DMA1,傳輸數據量
- DMA_CHx->CCR=0X00000000;//復位
- DMA_CHx->CCR|=0<<4; //從外設讀
- DMA_CHx->CCR|=1<<5; //循環模式
- DMA_CHx->CCR|=0<<6; //外設地址非增量模式
- DMA_CHx->CCR|=1<<7; //存儲器增量模式
- DMA_CHx->CCR|=1<<8; //外設數據寬度為16位
- DMA_CHx->CCR|=1<<10; //存儲器數據寬度16位
- DMA_CHx->CCR|=2<<12; //中等優先級 //最高優先級
- DMA_CHx->CCR|0<<14; //非存儲器到存儲器模式
- }
- //開啟一次DMA傳輸
- void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
- {
- DMA_CHx->CCR&=~(1<<0); //關閉DMA傳輸
- DMA_CHx->CNDTR=DMA1_MEM_LEN; //DMA1,傳輸數據量
- DMA_CHx->CCR|=1<<0; //開啟DMA傳輸
- }
-
復制代碼
0.png (49.9 KB, 下載次數: 57)
下載附件
2016-6-20 12:45 上傳
|
-
-
雙通道ADC采集DMA轉換.rar
2016-6-20 10:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
1.19 MB, 下載次數: 30, 下載積分: 黑幣 -5
代碼
評分
-
查看全部評分
|