概述
直接存儲(chǔ)器訪問(DMA)用于在外設(shè)與存儲(chǔ)器之間以及存儲(chǔ)器與存儲(chǔ)器之間提供高速數(shù)據(jù)傳輸。可以在無需任何CPU操作的情況下通過DMA快速傳輸傳輸。這樣節(jié)省的CPU資源可供其它操作使用。
DMA允許在后臺(tái)執(zhí)行數(shù)據(jù)傳輸,無需Cortex-MO處理器干預(yù)。在此操作過程中,主處理器可以執(zhí)行其它任務(wù),僅當(dāng)整個(gè)數(shù)據(jù)塊需要處理時(shí),才會(huì)中斷主處理器。這樣即使傳輸大量數(shù)據(jù)也不會(huì)對系統(tǒng)性能造成太大影響。
DMA主要用于為不同的外設(shè)模塊實(shí)現(xiàn)集中數(shù)據(jù)緩沖存儲(chǔ)(通常在系統(tǒng)SRAM中)。與分布式解決方案(其中每個(gè)外設(shè)都需要實(shí)現(xiàn)自己的本地?cái)?shù)據(jù)存儲(chǔ))相比,DMA解決方案在硅片成本和功耗方面的成本較低。
根據(jù)使用的產(chǎn)品型號的不同,有一個(gè)或兩個(gè)DMA模塊。
STM32F0XX DMA控制器總共有5個(gè)通道用于DMA1,每個(gè)通道都專門管理來自一個(gè)或多個(gè)外設(shè)的存儲(chǔ)器訪問請求。它具有一個(gè)仲裁器,用于處理不同的DMA請求的優(yōu)先級。
本篇文章主要介紹如何使用STM32CubeMX實(shí)現(xiàn)ADC在DMA下快速采集,并且打印出去。
非DMA接收請查看:https://blog.csdn.net/qq_24312945/article/details/109685401
硬件準(zhǔn)備
首先需要準(zhǔn)備一個(gè)開發(fā)板,這里我準(zhǔn)備的是NUCLEO-F030R8的開發(fā)板:
選擇芯片型號
使用STM32CUBEMX選擇芯片stm32f030r8,如下所示:
配置時(shí)鐘源
HSE與LSE分別為外部高速時(shí)鐘和低速時(shí)鐘,在本文中使用內(nèi)置的時(shí)鐘源,故都選擇Disable選項(xiàng),如下所示:
在這里插入圖片描述
配置時(shí)鐘樹
STM32F0的最高主頻到48M,所以配置48即可:
插入圖片描述
串口配置
本次實(shí)驗(yàn)使用的串口1進(jìn)行串口通信,波特率配置為115200。
ADC配置
STM32f030中,有一個(gè)ADC(模擬/數(shù)字轉(zhuǎn)換器),每個(gè) ADC 有 12 位、 10 位、 8 位和 6 位可選,每個(gè)ADC有16個(gè)外部通道、2個(gè)內(nèi)部通道和一個(gè)VBAT 通道的信號。
本文將開ADC的IN0、IN1、IN4一共三個(gè)通道,來分別讀取ADC,由于串口2和IN2,IN3復(fù)用,故不使用IN2、IN3。配置如下:
開啟DMA:
打開中斷:
生成工程設(shè)置
最后設(shè)置生成獨(dú)立的初始化文件:
生成代碼
配置keil
代碼
在main.c中,添加頭文件,若不添加會(huì)出現(xiàn) identifier 'FILE' is undefined報(bào)錯(cuò)。
/* USER CODE BEGIN Includes */
#include 'stdio.h'
/* USER CODE END Includes */
函數(shù)聲明和串口重定向:
/* USER CODE BEGIN PFP */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/* USER CODE END PFP */
/* USER CODE BEGIN 0 */
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END 0 */
變量定義:
/* USER CODE BEGIN 1 */
uint32_t ADC_1, ADC_2,ADC_3;
//各采樣30次,故30*3為90
uint32_t ADC_Value[90];
uint8_t i;
/* USER CODE END 1 */
使用DMA傳輸:
/* USER CODE BEGIN 2 */
HAL_ADC_Start_DMA(&hadc,(uint32_t*)&ADC_Value,90); //使用DMA傳輸
/* USER CODE END 2 */
主循環(huán):
/* USER CODE BEGIN WHILE */
while (1)
{
//放個(gè)延遲,防止程序運(yùn)行第一次讀出數(shù)據(jù)有誤
HAL_Delay(100);
ADC_1=0;
ADC_2=0;
ADC_3=0;
for(i=0,ADC_1=0,ADC_2=0;i<90;)
{
ADC_1+=ADC_Value[i++];
ADC_2+=ADC_Value[i++];
ADC_3+=ADC_Value[i++];
}
printf('ADC數(shù)據(jù)如下
');
//除以30為求30次平均ADC值,乘以3.3為以3.3電壓為基準(zhǔn),除以4096為ADC配置為12位
printf('ADC_IN0=%1.4f
',ADC_1/30*3.3f/4096);
printf('ADC_IN1=%1.4f
',ADC_2/30*3.3f/4096);
printf('ADC_IN2=%1.4f
',ADC_3/30*3.3f/4096);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(900);
}
/* USER CODE END 3 */
演示效果
設(shè)定adc1口接3.3V,adc2口接GND,adc口接1.5V,輸出如下。
上一篇:STM32單片機(jī)擴(kuò)展下的IPUS SQPI PSRAM應(yīng)用領(lǐng)域
下一篇:基于STM32F030對24LC02進(jìn)行代碼讀寫
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實(shí)惠套件和強(qiáng)大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設(shè)備數(shù)驅(qū)動(dòng)Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認(rèn)屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴(kuò)展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設(shè)置開機(jī)自啟動(dòng)
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測試
- i.MX RT600音頻評估套件
- 具有集成終端的 LTC2871 RS232/RS485 多協(xié)議收發(fā)器的典型應(yīng)用電路
- 使用 Richtek Technology Corporation 的 RT7279 的參考設(shè)計(jì)
- 具有 5V 輸出的 ZLDO1117 基本穩(wěn)壓器的典型應(yīng)用
- 索尼基于自家CXD5602的超強(qiáng)物聯(lián)網(wǎng)套件(開源資料)
- 使用 Richtek Technology Corporation 的 RT7237J 的參考設(shè)計(jì)
- LT1317BCS8 2V 至 3.3V 轉(zhuǎn)換器的典型應(yīng)用電路
- 基于arduino開發(fā)的電感測試表
- 采用 6 引腳 SOT-23 封裝的高速運(yùn)算放大器評估板
- NCV887701BSTGEVB:NCV887701 汽車啟停非同步升壓控制器評估板
- 汽車電子芯片國產(chǎn)化加速,GS32-DSP能否替代C2000?
- 機(jī)器人行業(yè)大魚:ABB機(jī)器人業(yè)務(wù)分拆上市
- 全球首個(gè)L3級架構(gòu)誕生在中國,意味著什么?
- 汽車存儲(chǔ)芯片研究:大模型推動(dòng)下,主機(jī)廠車用存儲(chǔ)芯片的選擇路徑分析
- 智駕按下急停鍵?正相反,真正的自動(dòng)駕駛就要來了!
- 國內(nèi)5個(gè)固態(tài)電池項(xiàng)目更新動(dòng)態(tài)
- 機(jī)器人如何防止碰撞?——安全探測器的技術(shù)架構(gòu)與性能突破
- 自動(dòng)駕駛汽車功能安全與網(wǎng)絡(luò)安全的融合
- 車企虛假宣傳最高判刑2年!智駕、接管成禁用詞?重拳出擊砸向誰?
- 強(qiáng)監(jiān)管下的智能汽車:新規(guī)詳解
- 看東芝在線展會(huì)視頻,聽權(quán)威汽車技術(shù)講解!
- Avnet&On semi 帶你看未來,3個(gè)你必須知道的行業(yè)趨勢!
- 學(xué)習(xí)有禮!A9駕到,打造你的專屬學(xué)習(xí)計(jì)劃!
- 好書共讀 | 《控制之美(卷2)——最優(yōu)化控制MPC與卡爾曼濾波器》
- 分享你遇到的那些bug和解決技巧,贏萬圣節(jié)小驚喜!
- 有獎(jiǎng)技術(shù)直播:Keysight量子計(jì)算測量方案線上研討會(huì)
- 玩游戲 和英飛凌一起解鎖天籟之音
- “慧眼”識(shí)PCIe——閱讀《PCIe要了解的十件事》和泰克OPEN-DAY的培訓(xùn)資料 抽獎(jiǎng)、分享贏好禮!
- 是德科技第二屆示波器感恩月之買一送一
- OPPO Find X2 Lite海外發(fā)布:搭載驍龍765,3800元起售
- 沈義人:OPPO Find X2已優(yōu)化觸屏性能
- 蘋果新iPhone SE火熱:國行紅色版本發(fā)行日期推遲
- 華為伸縮全面屏專利解密:完美屏占比
- 外媒上手價(jià)值5000余元人民幣蘋果Mac Pro滾輪套件
- 如何設(shè)計(jì)一個(gè)以AVR單片機(jī)為控制芯片的電子鎮(zhèn)流器?
- pic單片機(jī)io口控制教程之c語言編程實(shí)現(xiàn)
- PIC 8位單片機(jī)16C6×系列簡介
- PIC單片機(jī)特點(diǎn)及不足之處解析
- pic單片機(jī)選型須知與pic單片機(jī)選型手冊