胃痉挛是什么症状| 黑豆有什么功效| 照护保险是什么| 擦伤涂什么药膏| 就诊卡是什么| 嫩绿的什么| 怀孕什么时候可以同房| 佝偻病缺少什么元素| 梦见捡钱了是什么预兆| 一个人自言自语的说话是什么病| 沙僧是什么动物| 车顶放饮料什么意思| 宫颈多发潴留囊肿是什么意思| 鹅蛋脸适合戴什么眼镜| 水险痣是什么意思| 咳嗽有白痰吃什么药好| 77代表什么意思| 玻璃体混浊用什么药| 脱落细胞学检查是什么| 固执己见是什么意思| mdt是什么| 面瘫吃什么药好得快| 耳朵发痒是什么原因| 睡眠不好用什么泡脚| 五味子有什么功效和作用| 孕妇头疼是什么原因| 星期三打喷嚏代表什么| 三个白念什么| 胸痛是什么情况| 为什么老打嗝| 头发属于什么组织| 黑眼圈是什么原因| 一个三点水一个除念什么| 手足口病是什么病毒| 什么是情商高| 尿肌酐低是什么原因| 弱冠之年是什么意思| 儿童多动症挂什么科| 婴儿拉肚子吃什么药| 马蹄南去人北望是什么歌| 睡觉口干是什么原因| 梦见家里水管漏水是什么意思| 珑骧包属于什么档次| 癫痫病是什么症状| 类风湿不能吃什么| 脉压差小是什么原因| 眼睛突然红了是什么原因| 肝脏多发囊肿什么意思| 右侧卵巢内囊性结构什么意思| 能量是什么意思| 萎缩性胃炎吃什么食物好| 王代表什么生肖| 执子之手与子偕老是什么意思| 小孩尿酸高是什么原因| 什么叫感统训练| sparkling是什么意思| 张牙舞爪是什么意思| 一年级又什么又什么| 脸发烫是什么原因| development是什么意思| 宫高是什么意思| lodge是什么意思| 太白金星是什么神| 灵性是什么意思| 医政科是做什么的| 为什么精液是流出来的| 排骨炖什么好吃又有营养| 一百万存款算什么水平| 纤维灶是什么意思| dr钻戒什么档次| 口腔溃疡用什么药| 南瓜炒什么好吃| l1是什么意思| 月经来了腰疼是什么原因| 什么人不能念阿弥陀佛| 什么是树莓| 经常喝茶叶有什么好处| 医院脱毛挂什么科| 牙出血是什么病的前兆| 马甲线长什么样| 什么是跨域| 什么是传染病| 户口分户需要什么条件| 媒婆是什么意思| 3.15什么星座| 皮肤越抓越痒是什么原因| 孩子张嘴睡觉是什么原因| 出马仙是什么意思| 梦见死去的姥姥是什么意思| 芥末是什么植物做的| 焦俊艳和焦恩俊是什么关系| 月经颜色暗红色是什么原因| 直接胆红素偏高是什么意思| 世界上最难写的字是什么| hc2是什么检查| 什么原因引起痛风| 陈世美是什么样的人| 龙的本命佛是什么佛| 可乐鸡翅用什么可乐| 量贩式ktv什么意思| 冰箱买什么牌子的好| 半什么三什么| 磨平了棱角是什么意思| 世界上最大的昆虫是什么| 2004年属什么| 辛字五行属什么| 幕后是什么意思| 自身免疫性胃炎是什么意思| 缺维生素b有什么症状| 做梦吃肉是什么征兆| 金牛座是什么星象| 新生儿什么时候吃ad| au585是什么金| 肚子痛拉稀吃什么药| 神器积分换什么最划算| p2是什么意思| 广东广西以什么为界| 药吃多了会有什么后果| 晚上总是做梦是什么原因引起的| 舌头发白是什么原因| 肚子胀气是什么原因引起的| 诚不我欺什么意思| 脾虚是什么症状| 回族为什么不吃猪肉| 本科是什么| 交感神经是什么| 经期喝什么汤| 单核细胞偏高是什么意思| tct是什么| 吃什么补肾最快最有效| 干扰素是治什么病的| 汽车抖动是什么原因| 权威是什么意思| 梦见母亲去世预示什么| 鼻窦炎有什么症状表现| 伺候是什么意思| 神经痛什么原因引起的| 狗狗吃南瓜有什么好处| 去鱼腥味最好的方法是什么| 真身是什么意思| 胎盘后壁是什么意思| 甲子日五行属什么| 3价铁离子是什么颜色| 什么颜色加什么颜色等于什么颜色| marni是什么牌子| 减肥能喝什么饮料| 含羞草能治什么病| 剖腹产吃什么下奶最快| dpl是什么意思| 直言不讳是什么意思| 甲状腺炎有什么症状| 二月二十三日是什么星座| 日有所思夜有所梦是什么意思| 脱肛是什么症状| 摄取是什么意思| 月经有黑色血块是什么原因| 周期是什么意思| 妤是什么意思| 郫县豆瓣酱能做什么菜| 鸡茸是什么东西| 陈赫为什么离婚| 牙痛用什么药止痛快| cap是什么| 蝈蝈是什么动物| 紫河车是什么| o和b型生的孩子是什么血型| 蕴是什么意思| 多吃海带有什么好处和坏处| 为什么老是抽筋| 亓是什么意思| 杨琴是什么乐器| 母亲节买什么礼物| 农历八月初五是什么星座| 个子矮穿什么好看| 外援是什么意思| 碳水化合物是什么食物| 晚上肚子疼是什么原因| 什么是邮箱地址| 剖腹产坐月子吃什么| mic是什么单位| bf是什么| 增加免疫力吃什么| 摸摸唱是什么意思| 可定是什么药| 梦见被狗咬是什么预兆| 世界上最长的河流是什么| 不孝有三无后为大是什么意思| 英国为什么叫日不落帝国| 桃子又什么又什么填空| 白带正常是什么颜色| 2018 年是什么年| 肠胃不舒服挂什么科| 箭在弦上是什么意思| ctc什么意思| 夜叉是什么意思| 塑料袋属于什么垃圾| 动物的耳朵有什么作用| 抚摸是什么意思| 吃完饭就犯困是什么原因| tpp是什么意思| 什么是消炎药| 男性尿道口流脓吃什么药最管用| 女朋友的弟弟叫什么| sample是什么意思| 股癣用什么药膏效果最好| 时迁是什么意思| 免疫球蛋白e高说明什么| 盆腔镜检查是查什么的| 牙齿变黑是什么原因| 打喷嚏流清鼻涕吃什么药| 貔貅什么人不能戴| 烦闷是什么意思| 持续低烧不退是什么原因| 手上长痣代表什么| 12岁是什么礼| 悟性高是什么意思| 早孕期间吃什么最营养| 皮肤过敏不能吃什么| 青红皂白的皂是什么颜色| 锁阳有什么功效| 牙龈出血用什么牙膏| 褒义词是什么意思| 玄机是什么意思| 七月九号是什么星座| 游戏id是什么意思| 前列腺增大是什么原因| 胆固醇高吃什么好| 为什么出汗特别多| 政治家是什么意思| 梦见大胖小子是什么意思| 因子是什么| 控制线是什么意思| 勇者胜的上半句是什么| 什么叫血沉| 未免是什么意思| 双鱼座和什么星座最配| 萤火虫吃什么食物| 国外微信叫什么| 心脏消融术是什么手术| 霉菌感染用什么药最好| ckd医学上是什么意思| bayer是什么药| 异口同声什么意思| 张一山和杨紫是什么关系| 梦见自己大笑是什么意思| 什么降血糖| 50年是什么婚| 两个口是什么字| 合财是什么意思| 00后是什么意思| 一带一路是指什么| 5点是什么时辰| 儿童查微量元素挂什么科| 汗血宝马什么意思| 高密度脂蛋白胆固醇低是什么意思| 生肉是什么意思| 医生五行属什么| 淋巴癌有什么症状| 前列腺钙化有什么症状| 美国为什么支持以色列| 嘴唇上起泡是什么原因| 子宫腺肌症吃什么药最有效| 宋朝之前是什么朝代| 幽门螺旋杆菌感染有什么症状| 百度
打印
[RISC-V MCU 应用开发]

香港检出大闸蟹二恶英含量超标,可能是环境污染的错

[复制链接]
1584|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
RISCVLAR|  楼主 | 2025-08-04 16:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
CH32V103应用教程——DMA(存储器到外设)

关于DMA,具有三种数据传输方式:存储器到存储器、存储器到外设、外设到存储器。前面已讲解过关于存储器到存储器数据传输方式,本章将讲解存储器到外设的传输方式以及在下一章将会讲解外设到存储器的传输方式。关于DMA存储器到外设传输方式,程序中,首先定义一个静态的源数据,存放在内部 FLASH中,然后通过DMA的方式传输到串口的数据寄存器,然后通过串口把这些数据发送到电脑的上位机显示出来。

1、DMA简介及相关函数介绍
直接存储器访问控制器(DMA)提供在外设和存储器之间或者存储器和存储器之间的高速数据传输方式,无须CPU干预,数据可以通过DMA快速地移动,以节省CPU的资源来做其他操作。
DMA控制器有7个通道,每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各通道之间的优先级。
DMA作为一种高效、高速的数据传输方式,具有以下几个特性:
  • 具有7个独立可配置通道,且每个通道都连接专用的硬件DMA请求,并支持软件触发
  • 支持循环的缓冲器管理
  • 多个通道之间的请求优先权可以通过软件编程设置(最高、高、中和低),优先权设置相等时由通道号决定(通道号低优先级高)
  • 支持三种传输方式:存储器到存储器、存储器到外设、外设到存储器
  • 闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标
  • 独立数据源独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐。
  • 每个通道都有3个事件标志(DMA传输过半、DMA传输完成和DMA传输错误),这3个事件标志逻辑或成为一个单独的中断请求
关于DMA具体信息,可参考CH32V103应用手册。DMA标准库函数第十三章已做过介绍,在此不再赘述。

2、硬件设计
本章教程所用资源均为CH32V103开发板内部资源,无需进行其他硬件连接,只需进行程序配置即可。

3软件设计
本章主要进行存储器到外设的DMA数据传输方式,其相较于存储器到存储器的传输方式,程序中对DMA配置进行一些修改即可,具体如下:
dma.h文件
#ifndef __DMA_H
#define __DMA_H

#include "ch32v10x_conf.h"

void DMA1_CH4_Init(void); //DMA传输参数初始化配置

#endif
dma.h文件主要进行函数声明;
dma.c文件
#include "dma.h"

u8 SRC_BUF[]= "DMA test: from memory to peripheral";
#define TxSize1   (sizeof(SRC_BUF))

/*******************************************************************************
* Function Name  : DMA1_CH4_Init
* Description    : Initializes Channel4 of DMA1 collection.
* Input          : None
* Return         : None
*******************************************************************************/
//DMA1通道4传输参数配置
void DMA1_CH4_Init(void)
{
  DMA_InitTypeDef DMA_InitStructure;
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);        //使能DMA1时钟

  DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DATAR);   //设置外设地址(外设串口1)
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)(SRC_BUF);     //设置存储器地址
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;            //设置传输方向:存储器到外设
  DMA_InitStructure.DMA_BufferSize = TxSize1;                            //设置传输大小
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;          //指定外设地址不变。
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                //指定存储器地址递增。
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //设置外设数据单位
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;       //设置存储器数据单位
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;              //设置对应DMA工作模式为正常模式
  DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;       //设置DMA1通道4优先级
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                //禁止使能DMA存储器到存储器的传输方式
  DMA_Init(DMA1_Channel4, &DMA_InitStructure);                    //根据DMA_InitStruct中指定的参数初始化DMA1通道4
  DMA_ClearFlag(DMA1_FLAG_TC4);   //清除DMA1通道4传输完成挂起标志

  DMA_Cmd(DMA1_Channel4, ENABLE); //使能DMA1通道4
}

dma.c文件主要进行DMA传输参数初始化配置。DMA存储器到外设传输方式,相较于存储器到存储器传输方式,具体修改如下:
  • 关于目标地址,改为外设地址,此处为串口1
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DATAR);
  • 关于源地址,改为存储器地址:
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)(SRC_BUF);
  • 关于DMA传输方式及方向,改为存储器到外设:
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
  • 关于DMA传输大小,根据源数据进行设置:
DMA_InitStructure.DMA_BufferSize = TxSize1;
  • 关于DMA外设地址,设置外设地址不变:
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  • 关于DMA存储器地址,与之前一样,设置存储器地址递增:
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  • 关于DMA存储器数据单位和外设数据单位,设为一样,与之前一致:
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //设置外设数据单位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;       //设置存储器数据单位
  • 关于DMA工作模式以及DMA通道优先级,与之前一致:
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;              //设置对应DMA工作模式为正常模式
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;       //设置DMA1通道4优先级
  • 关于DMA传输方式及传输方向使能,禁止使能DMA存储器到存储器传输方式:
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
此外,由CH32V103应用手册可知,本次所用外设串口1对应DMA通道4,如下图:
因此,初始化以及使能DMA通道4:
DMA_Init(DMA1_Channel4, &DMA_InitStructure);                  //根据DMA_InitStruct中指定的参数初始化DMA1通道4
DMA_ClearFlag(DMA1_FLAG_TC4);   //清除DMA1通道4传输完成挂起标志
DMA_Cmd(DMA1_Channel4, ENABLE); //使能DMA1通道4

4下载验证
将编译好的程序下载到开发板并复位,可见存储器存储数据被发送到串口:


26、DMA(存储器到外设).rar

463.59 KB

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

296

帖子

44

粉丝
霜降是什么时候 529是什么意思 知交是什么意思 睡眠不好用什么泡脚助于睡眠 坐怀不乱是什么意思
什么呢 fsh是什么 志趣相投是什么意思 卡地亚属于什么档次 男属蛇和什么属相最配
五月十九日是什么星座 骨折什么症状 立flag是什么意思 louis是什么意思 马铃薯什么时候传入中国
彩超无回声是什么意思 知否知否应是绿肥红瘦什么意思 放屁臭鸡蛋味什么原因 低压高吃什么 胃火吃什么中成药
梦见掉了三颗牙齿是什么意思hcv8jop9ns7r.cn 长期干咳无痰是什么原因引起的fenrenren.com 眼睛突然红了是什么原因wzqsfys.com 决明子泡水喝有什么好处adwl56.com 智商130算什么水平hcv8jop5ns5r.cn
天麻有什么作用与功效helloaicloud.com 劳宫穴在什么位置hcv8jop5ns3r.cn 什么叫制动hcv9jop3ns9r.cn 口臭药店买什么药吃hcv8jop0ns1r.cn 臆想症是什么意思hcv9jop5ns7r.cn
长歌怀采薇是什么意思hcv8jop5ns1r.cn 引流是什么意思hcv9jop2ns6r.cn 三角形为什么具有稳定性hcv8jop6ns9r.cn 不知道为了什么hcv9jop1ns0r.cn 红糖不能和什么一起吃tiangongnft.com
尿液有泡沫什么原因hcv8jop9ns5r.cn 兰桂齐芳是什么意思hcv8jop1ns1r.cn 面部神经挂什么科hcv8jop5ns2r.cn 极光是什么sscsqa.com 肺阳虚吃什么中成药hcv8jop1ns5r.cn
百度