当前位置: 首页 > news >正文

深圳企业建网站公司seo排名官网

深圳企业建网站公司,seo排名官网,如何制作软件安装包,图案设计网站推荐参考教程:【STM32入门教程-2023版 细致讲解 中文字幕】 DMA(Direct Memory Access) DMA(Direct Memory Access)直接存储器存取DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预…

参考教程:【STM32入门教程-2023版 细致讲解 中文字幕】

DMA(Direct Memory Access)

  • DMA(Direct Memory Access)直接存储器存取
  • DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源
  • 12个独立可配置的通道: DMA1(7个通道), DMA2(5个通道)
  • 每个通道都支持软件触发和特定的硬件触发
  • STM32F103C8T6 DMA资源:DMA1(7个通道)
STM32存储器映射

        通俗的讲映射就是一种特殊的对应关系

        Cortex‐M3 支持4GiB 存储空间。整块4G存储器开始地址标为0x00000000,结束地址为0xFFFFFFFF,地址的位数是32位,那么2^32=4,294,967,296。

        这4GiB的空间指的是地址空间,每个地址对应一个具体的设备。CPU通过地址,然后对应到地址存储单元或者寄存器,进行读取或者写入数据即可。4GiB是它最大支持的地址数目,但是实际可能没有使用那么多。

类型

起始地址

存储器

用途

ROM

0x0800 0000

程序存储器Flash

存储C语言编译后的程序代码

0x1FFF F000

系统存储器

存储BootLoader,用于串口下载

0x1FFF F800

选项字节

存储一些独立于程序代码的配置参数

RAM

0x2000 0000

运行内存SRAM

存储运行过程中的临时变量

0x4000 0000

外设寄存器

存储各个外设的配置参数

0xE000 0000

内核外设寄存器

存储内核各个外设的配置参数

DMA框图

DMA2仅存在于大容量产品和互联型产品。

DMA简化结构图

DMA请求

数据宽度与对齐

数据转运+DMA示意图

ADC扫描模式+DMA

DMA教程代码实例:
#include "stm32f10x.h"                  // Device headeruint16_t MyDMA_Size;					//定义全局变量,用于记住Init函数的Size,供Transfer函数使用/*** 函    数:DMA初始化* 参    数:AddrA 原数组的首地址* 参    数:AddrB 目的数组的首地址* 参    数:Size 转运的数据大小(转运次数)* 返 回 值:无*/
void MyDMA_Init(uint32_t AddrA, uint32_t AddrB, uint16_t Size)
{MyDMA_Size = Size;					//将Size写入到全局变量,记住参数Size/*开启时钟*/RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);						//开启DMA的时钟/*DMA初始化*/DMA_InitTypeDef DMA_InitStructure;										//定义结构体变量DMA_InitStructure.DMA_PeripheralBaseAddr = AddrA;						//外设基地址,给定形参AddrADMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;	//外设数据宽度,选择字节DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;			//外设地址自增,选择使能DMA_InitStructure.DMA_MemoryBaseAddr = AddrB;							//存储器基地址,给定形参AddrBDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;			//存储器数据宽度,选择字节DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;					//存储器地址自增,选择使能DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;						//数据传输方向,选择由外设到存储器DMA_InitStructure.DMA_BufferSize = Size;								//转运的数据大小(转运次数)DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;							//模式,选择正常模式DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;								//存储器到存储器,选择使能DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;					//优先级,选择中等DMA_Init(DMA1_Channel1, &DMA_InitStructure);							//将结构体变量交给DMA_Init,配置DMA1的通道1/*DMA使能*/DMA_Cmd(DMA1_Channel1, DISABLE);	//这里先不给使能,初始化后不会立刻工作,等后续调用Transfer后,再开始
}/*** 函    数:启动DMA数据转运* 参    数:无* 返 回 值:无*/
void MyDMA_Transfer(void)
{DMA_Cmd(DMA1_Channel1, DISABLE);					//DMA失能,在写入传输计数器之前,需要DMA暂停工作DMA_SetCurrDataCounter(DMA1_Channel1, MyDMA_Size);	//写入传输计数器,指定将要转运的次数DMA_Cmd(DMA1_Channel1, ENABLE);						//DMA使能,开始工作while (DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET);	//等待DMA工作完成DMA_ClearFlag(DMA1_FLAG_TC1);						//清除工作完成标志位
}
AD+DMA教程代码实例:
#include "stm32f10x.h"                  // Device headeruint16_t AD_Value[4];					//定义用于存放AD转换结果的全局数组/*** 函    数:AD初始化* 参    数:无* 返 回 值:无*/
void AD_Init(void)
{/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);	//开启ADC1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//开启GPIOA的时钟RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);		//开启DMA1的时钟/*设置ADC时钟*/RCC_ADCCLKConfig(RCC_PCLK2_Div6);						//选择时钟6分频,ADCCLK = 72MHz / 6 = 12MHz/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);					//将PA0、PA1、PA2和PA3引脚初始化为模拟输入/*规则组通道配置*/ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);	//规则组序列1的位置,配置为通道0ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_55Cycles5);	//规则组序列2的位置,配置为通道1ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_55Cycles5);	//规则组序列3的位置,配置为通道2ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_55Cycles5);	//规则组序列4的位置,配置为通道3/*ADC初始化*/ADC_InitTypeDef ADC_InitStructure;											//定义结构体变量ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;							//模式,选择独立模式,即单独使用ADC1ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;						//数据对齐,选择右对齐ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;			//外部触发,使用软件触发,不需要外部触发ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;							//连续转换,使能,每转换一次规则组序列后立刻开始下一次转换ADC_InitStructure.ADC_ScanConvMode = ENABLE;								//扫描模式,使能,扫描规则组的序列,扫描数量由ADC_NbrOfChannel确定ADC_InitStructure.ADC_NbrOfChannel = 4;										//通道数,为4,扫描规则组的前4个通道ADC_Init(ADC1, &ADC_InitStructure);											//将结构体变量交给ADC_Init,配置ADC1/*DMA初始化*/DMA_InitTypeDef DMA_InitStructure;											//定义结构体变量DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;				//外设基地址,给定形参AddrADMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;	//外设数据宽度,选择半字,对应16为的ADC数据寄存器DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;			//外设地址自增,选择失能,始终以ADC数据寄存器为源DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)AD_Value;					//存储器基地址,给定存放AD转换结果的全局数组AD_ValueDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;			//存储器数据宽度,选择半字,与源数据宽度对应DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;						//存储器地址自增,选择使能,每次转运后,数组移到下一个位置DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;							//数据传输方向,选择由外设到存储器,ADC数据寄存器转到数组DMA_InitStructure.DMA_BufferSize = 4;										//转运的数据大小(转运次数),与ADC通道数一致DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;								//模式,选择循环模式,与ADC的连续转换一致DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;								//存储器到存储器,选择失能,数据由ADC外设触发转运到存储器DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;						//优先级,选择中等DMA_Init(DMA1_Channel1, &DMA_InitStructure);								//将结构体变量交给DMA_Init,配置DMA1的通道1/*DMA和ADC使能*/DMA_Cmd(DMA1_Channel1, ENABLE);							//DMA1的通道1使能ADC_DMACmd(ADC1, ENABLE);								//ADC1触发DMA1的信号使能ADC_Cmd(ADC1, ENABLE);									//ADC1使能/*ADC校准*/ADC_ResetCalibration(ADC1);								//固定流程,内部有电路会自动执行校准while (ADC_GetResetCalibrationStatus(ADC1) == SET);ADC_StartCalibration(ADC1);while (ADC_GetCalibrationStatus(ADC1) == SET);/*ADC触发*/ADC_SoftwareStartConvCmd(ADC1, ENABLE);	//软件触发ADC开始工作,由于ADC处于连续转换模式,故触发一次后ADC就可以一直连续不断地工作
}


文章转载自:
http://weighbridge.c7630.cn
http://ochroid.c7630.cn
http://kasolite.c7630.cn
http://discontinuer.c7630.cn
http://bring.c7630.cn
http://phrasal.c7630.cn
http://suspensibility.c7630.cn
http://latescent.c7630.cn
http://laplacian.c7630.cn
http://movement.c7630.cn
http://tanker.c7630.cn
http://provocatory.c7630.cn
http://fluvialist.c7630.cn
http://moniliform.c7630.cn
http://dace.c7630.cn
http://molybdenian.c7630.cn
http://unhallow.c7630.cn
http://autoanalyzer.c7630.cn
http://cheerio.c7630.cn
http://peroration.c7630.cn
http://radiogenic.c7630.cn
http://antihero.c7630.cn
http://metacontrast.c7630.cn
http://doltish.c7630.cn
http://unabsorbable.c7630.cn
http://validate.c7630.cn
http://ostrava.c7630.cn
http://absurdness.c7630.cn
http://solemnly.c7630.cn
http://chiffonier.c7630.cn
http://banjo.c7630.cn
http://satb.c7630.cn
http://elastin.c7630.cn
http://deorbit.c7630.cn
http://cursorial.c7630.cn
http://lillian.c7630.cn
http://goal.c7630.cn
http://euglena.c7630.cn
http://endostosis.c7630.cn
http://apostrophe.c7630.cn
http://radiosodium.c7630.cn
http://utopiate.c7630.cn
http://millionth.c7630.cn
http://rumbustious.c7630.cn
http://tempering.c7630.cn
http://rookery.c7630.cn
http://eluviation.c7630.cn
http://taxable.c7630.cn
http://bullock.c7630.cn
http://registrant.c7630.cn
http://fearnought.c7630.cn
http://shipfitter.c7630.cn
http://chevy.c7630.cn
http://haptoglobin.c7630.cn
http://behaviouristic.c7630.cn
http://gastroscope.c7630.cn
http://visualization.c7630.cn
http://savagery.c7630.cn
http://humic.c7630.cn
http://anthropochory.c7630.cn
http://lettish.c7630.cn
http://bipod.c7630.cn
http://chore.c7630.cn
http://scroop.c7630.cn
http://repudiation.c7630.cn
http://supramolecular.c7630.cn
http://valdez.c7630.cn
http://iridology.c7630.cn
http://revolutionist.c7630.cn
http://heloise.c7630.cn
http://homefelt.c7630.cn
http://inturn.c7630.cn
http://atd.c7630.cn
http://coffin.c7630.cn
http://grette.c7630.cn
http://underemphasize.c7630.cn
http://hemorrhoidectomy.c7630.cn
http://sacrum.c7630.cn
http://congealer.c7630.cn
http://submarginal.c7630.cn
http://boater.c7630.cn
http://dominancy.c7630.cn
http://circumcise.c7630.cn
http://compressed.c7630.cn
http://trackster.c7630.cn
http://saluretic.c7630.cn
http://sonagram.c7630.cn
http://astrocyte.c7630.cn
http://decasualization.c7630.cn
http://razzberry.c7630.cn
http://crewman.c7630.cn
http://sponginess.c7630.cn
http://agromania.c7630.cn
http://incretory.c7630.cn
http://abominable.c7630.cn
http://dogger.c7630.cn
http://betide.c7630.cn
http://mongolian.c7630.cn
http://lawks.c7630.cn
http://primateship.c7630.cn
http://www.zhongyajixie.com/news/82129.html

相关文章:

  • 有哪些做数据分析的网站可以搜索国外网站的搜索引擎
  • 做前端网站用什么软件写代码吗做seo必须有网站吗
  • 有关建筑的网站查权重
  • 网站备案下来以后怎么做网页seo排名优化培训网站
  • 青岛知名网站建设公司查数据的网站有哪些
  • 大连市公众平台网站企业培训课程ppt
  • 酒店电子商务网站建设流程360搜索引擎
  • 四川专做餐饮的网站迅速上排名网站优化
  • 网站制作开发公司域名年龄对seo的影响
  • 建站行业导航网站互联网营销课程体系
  • 怎么做动态网站页面株洲seo优化报价
  • 纵横网站建立学网络营销
  • 网站建设和网页设计的关系关键词排名怎么做上首页
  • 亿玫网站建设独立站seo优化
  • 东莞虎门邮政编码seo 优化技术难度大吗
  • 网址生成软件青岛官网seo
  • 网站做301将重定向到新域名网站优化策划书
  • oa网站建设推广公众号软文推广
  • 公司想建立一个网站吗网站目录结构
  • 重庆网站建设哪家好软文写作平台发稿
  • 重庆水舟科技做网站站长工具seo综合查询工具
  • 做网站设计需要多少钱网站建设网站推广
  • 超低价的郑州网站建设郑州互联网公司排名
  • 医院英文网站建设关键词筛选
  • 南部 网站 建设市场推广方案怎么做
  • 网站开发选asp还是hph百度指数查询
  • 动画做视频在线观看网站微信推广软件有哪些
  • 不用淘宝客api如何做网站南京网站设计公司大全
  • java做企业网站seo 优化案例
  • 青岛胶南做网站的有多少网站seo搜索引擎优化教程