第三十天-DMA串口實驗

一、DMA概述

二、DMA通道

注意,想要往串口中寫數據,外部請求信號應該是USARTx_TX,當DR寄存器為空時,產生TX信號,請求DMA。反之,從串口中讀數據,外部請求信號應該是USARTx_RX,當DR寄存器滿時,產生RX信號,請求DMA。

三、DMA處理過程

四、DMA中斷

五、相關寄存器

六、實驗部分

1、實驗要求

使用DMA,將內存中800個字節發送給串口。

2、詳細代碼

①dma.c

#include "dma.h"void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{//時鐘使能RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//初始化DMA_DeInit(DMA_CHx);DMA_InitTypeDef DMA_InitStruct;DMA_InitStruct.DMA_BufferSize = cndtr;DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralDST;DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;DMA_InitStruct.DMA_MemoryBaseAddr =cmar;DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;DMA_InitStruct.DMA_PeripheralBaseAddr = cpar;DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA_InitStruct.DMA_Priority = DMA_Priority_Medium;DMA_Init(DMA1_Channel4, &DMA_InitStruct);
}void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{DMA_Cmd(DMA_CHx, DISABLE);DMA_SetCurrDataCounter(DMA_CHx,MAXNUM);USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);DMA_Cmd(DMA_CHx, ENABLE);}

②main.c

#include "stm32f10x.h"
#include "rtc.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "wkup.h"
#include "adc.h"
#include "tsensor.h"
#include "lsensor.h"
#include "dac.h"
#include "key.h"
#include "timer.h"
#include "dma.h"
#include "string.h"int main(void){	u16 t = 0;char data[MAXNUM + 1] = {0};char name[] = "我是春春大哥哥\r\n";for(u16 i = 0;i < MAXNUM / strlen(name);i++){strcat(data,name);}delay_init();uart_init(115200);LED_Init();KEY_Init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);RTC_Init();LCD_Init(); Adc_Init();MYDMA_Config(DMA1_Channel4,(u32)&(USART1->DR),(u32)data,MAXNUM);LCD_ShowString(60,120,200,24,24,"    -  -  ");LCD_ShowString(60,174,200,24,24,"  :  :  ");while(1){++t;if(t % 100 == 0){LED0 =! LED0;}u8 key = KEY_Scan(0);if(key == kup_pres){MYDMA_Enable(DMA1_Channel4);}delay_ms(10);}}

3、代碼調試

一定要注意,如果不是循環模式的話,當一次DMA結束后,DMA_BufferSize就會清0,并且該位為0時,DMA不工作。所以,每次使用DMA都要重設該值,并且重設該值之前要DIABLE CMD。

4、實驗結果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921229.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921229.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921229.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C/C++ 中的inline(內聯函數關鍵字)詳解

在 C/C 編程中&#xff0c;函數調用雖然帶來了代碼復用和可讀性提升&#xff0c;但頻繁調用小型函數可能會產生額外的調用開銷&#xff08;call overhead&#xff09;&#xff0c;比如棧幀的建立與銷毀、參數傳遞等。 為了減少這種開銷&#xff0c;C 引入了 inline&#xff08;…

2025 年高教社杯全國大學生數學建模競賽A 題 煙幕干擾彈的投放策略完整成品 思路 模型 代碼 結果 全網首發高質量!!!

煙幕干擾彈主要通過化學燃燒或爆炸分散形成煙幕或氣溶膠云團,在目標前方特定空域形成遮蔽&#xff0c;干擾敵方導彈&#xff0c;具有成本低、效費比高等優點。隨著煙幕干擾技術的不斷發展&#xff0c;現已有多種投放方式完成煙幕干擾彈的定點精確拋撒,即在拋撒前能精確控制煙幕…

嵌入式第四十五天(51單片機相關)

一.1.CPU、MPU、MCU、GPU&#xff1a; CPU&#xff08;中央處理器&#xff09;&#xff1a;計算機的核心部件&#xff0c;負責執行指令和處理數據。 MPU&#xff08;微處理器&#xff09;&#xff1a;通常指更通用的處理器&#xff0c;強調計算能力。 MCU&#xff08;微控制器&…

今天面了一個Java后端工程師,真的讓我猛抬頭

今天面了一個Java后端工程師,真的讓我猛抬頭啊. 現在面試不像傳統的八股文面試,我更多問的都是項目場景相關的問題,但是都能回答的不錯.這一點我還是很驚訝的。 不僅如此,她的技術也很扎實,對Java核心機制&#xff08;JVM、并發、集合等&#xff09;理解深入&#xff0c;回答…

攔截器和過濾器(理論+實操)

攔截器和過濾器 本文旨在夯實基礎以及實戰加深理解,目的是更深的理解以便掌握,希望能跟著動手敲一遍,絕對受益匪淺 在本文,我會先給出兩者的區別(理論知識),隨后是兩者各自的實操實現 文章目錄攔截器和過濾器什么是過濾器和攔截器?1.過濾器2.攔截器執行整體流程攔截器和過濾器…

HTB 賽季8靶場 - Guardian

各位好&#xff0c;最近我的kali崩掉了&#xff0c;崩掉了&#xff0c;建議大家避K 番茄C盤瘦身&#xff0c;這家伙修改了我的avrt.dll文件&#xff0c;導致virtualbox不接受我的avrt.dll文件的簽名了&#xff0c;從而導致virtualbox的虛擬機環境全崩無法開機。弄了幾天&#x…

Rust+slint實現一個登錄demo

系列文章目錄 文章目錄系列文章目錄前言一、為什么前端選擇slint而不是Tauri或者其他GUI框架二、開發工具三、代碼編寫項目結構前端代碼編寫后端開發編寫運行效果總結前言 本文章就是一個簡單rust全棧編程的一個小小的示例供rust新手閱讀學習。 一、為什么前端選擇slint而不是…

2025前端面試題及答案(詳細)

HTML5 的新特性有哪些&#xff1f;簡約版本&#xff1a;“HTML5 新特性主要體現在六個方面&#xff1a; 第一&#xff0c;語義化標簽&#xff0c;比如 header、footer、nav 等&#xff0c;讓頁面結構更清晰&#xff1b; 第二&#xff0c;表單增強&#xff0c;新增了 date、emai…

分詞器詳解(二)

&#x1f50d; 第2層&#xff1a;中等深度&#xff08;15分鐘理解&#xff09; 1. 理論基礎 1.1 BPE的數學原理 核心思想&#xff1a;通過迭代合并高頻字符對構建詞匯表 算法形式化&#xff1a; 初始化詞匯表 V0{c1,c2,...,cn}V_0 \{c_1, c_2, ..., c_n\}V0?{c1?,c2?,...,c…

嵌入式學習 51單片機(3)

UART 概述通用異步收發器&#xff08;UART&#xff09;是一種全雙工、串行、異步通信協議&#xff0c;常用于設備間數據傳輸。包含兩根信號線&#xff1a;RXD&#xff08;接收信號線&#xff09;TXD&#xff08;發送信號線&#xff09;通信方式單工通信方向固定&#xff0c;僅支…

Redis AOF 持久化:銀行的 “交易流水單” 管理邏輯

目錄 一、AOF 的核心邏輯&#xff1a;“每筆交易都記流水” 二、AOF 的三個步驟&#xff1a;從 “臨時記錄” 到 “正式歸檔” 1. 命令追加&#xff1a;記到 “臨時小本本” 2. 寫入與同步&#xff1a;抄到 “正式流水冊” 3. AOF 還原&#xff1a;拿 “流水冊” 重放交易…

代碼隨想錄訓練營第三十天|LeetCode452.用最少數量的箭引爆氣球、LeetCode435.無重疊空間、LeetCode763.劃分字母空間

452.用最少數量的箭引爆氣球 貪心算法 重合最多的氣球射一箭&#xff0c;就是局部用箭數量最少的&#xff0c;全局的用箭數量就是最少的。 首先對二維數組進行排序&#xff0c;這樣就可以讓氣球更加緊湊。 思路&#xff1a;當前氣球是否和上一個氣球區間重合&#xff0c;如…

數據庫事務隔離級別與 MVCC 機制詳解

最近在準備面試&#xff0c;正把平時積累的筆記、項目中遇到的問題與解決方案、對核心原理的理解&#xff0c;以及高頻業務場景的應對策略系統梳理一遍&#xff0c;既能加深記憶&#xff0c;也能讓知識體系更扎實&#xff0c;供大家參考&#xff0c;歡迎討論。在數據庫并發操作…

【Cursor-Gpt-5-high】StackCube-v1 任務訓練結果不穩定性的分析

1. Prompt 我是機器人RL方向的博士生正在學習ManiSkill&#xff0c;在學習時我嘗試使用相同命令訓練同一個任務&#xff0c;但是我發現最終的 success_once 指標并不是相同的&#xff0c;我感到十分焦慮&#xff0c; 我使用的命令如下&#xff1a; python sac.py --env_id"…

文檔權限設置不合理會帶來哪些問題

文檔權限設置不合理會導致信息泄露、合規風險、協作效率下降、責任難以追溯、知識資產流失、員工信任受損、管理成本增加、企業戰略受阻。這些問題不僅影響日常運營&#xff0c;更會對企業的長遠發展構成威脅。根據IBM《2024數據泄露成本報告》&#xff0c;全球企業因數據泄露的…

Linux網絡服務——基礎設置

網絡服務命令1.ping命令作用&#xff1a;測試網絡連通性&#xff08;使用icmp協議&#xff09;常見選項&#xff1a;-c&#xff1a;指定ping的次數&#xff0c;默認無限次-I&#xff1a;指定發送請求的網卡[rootlocalhost ~]# ping 192.168.77.78 -c 4 -I ens160 PING 192.168.…

【multisim汽車尾燈設計】2022-12-1

緣由multisim汽車尾燈設計-學習和成長-CSDN問答 為什么模仿別人做的運行沒啥效果&#xff0c;啥也看不明白&#xff0c;數字電子技術要做的任務。

Langchain在調用 LLM 時統計 Token 消耗

關鍵點解析使用上下文管理器with get_openai_callback() as cb:這一行是核心。cb 會自動收集本次調用的 prompt tokens、completion tokens 以及 total tokens。自動統計在上下文退出時&#xff0c;cb 中已經包含了這次調用的消耗情況&#xff0c;無需額外手動計算。累加到全局…

漫談《數字圖像處理》之實時美顏技術

隨著移動拍攝、直播、短視頻等場景的普及&#xff0c;用戶對 “自然、流暢、可控” 的美顏效果需求日益提升 —— 既要消除皮膚瑕疵、優化面部形態&#xff0c;又需避免 “過度磨皮顯假”“變形失真”“實時卡頓” 等問題。實時美顏技術的核心并非單一算法的堆砌&#xff0c;而…

MATLAB基于PSO(粒子群算法)優化BP神經網絡和NSGA-II(非支配排序遺傳算法)多目標優化

代碼實現了一個智能算法優化BP神經網絡并進行多目標優化的完整流程&#xff0c;結合了PSO&#xff08;粒子群算法&#xff09;優化BP神經網絡和NSGA-II&#xff08;非支配排序遺傳算法&#xff09;多目標優化&#xff0c;用于多輸入多輸出的回歸預測問題。 ? 一、主要功能 數…