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

陇南市建设局官方网站红色礼品网站模板

陇南市建设局官方网站,红色礼品网站模板,一个网站多个数据库,wordpress如何设置ssl本篇博客重点在于标准库函数的理解与使用#xff0c;搭建一个框架便于快速开发 目录 DMA简介 DMA时钟使能 DMA初始化 转运起始和终止的地址 转运方向 数据宽度 传输次数 转运触发方式 转运模式 通道优先级 开启DMA通道 DMA初始化框架 更改转运次数 DMA应用实例-… 本篇博客重点在于标准库函数的理解与使用搭建一个框架便于快速开发 目录 DMA简介 DMA时钟使能 DMA初始化 转运起始和终止的地址 转运方向 数据宽度 传输次数 转运触发方式 转运模式 通道优先级  开启DMA通道  DMA初始化框架 更改转运次数 DMA应用实例-存储器到存储器转运 DMA.h DMA.c  main.c  DMA简介 DMADirect Memory Access直接存储器存取 可以提供外设和存储器或者存储器和存储器之间的高速数据传输无须CPU干预。这使CPU可以去做其他复杂的事情。12个独立可配置的通道 DMA17个通道 DMA25个通道每个通道都支持软件触发和特定的硬件触发 STM32F103C8T6 DMA资源DMA17个通道具体DMA资源可以查看参考手册 DMA框图 DMA时钟使能 已知DMA在AHB总线如图 由RCC时钟树知应使能外部时钟  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); DMA初始化 外设和存储器只是个名字我们要确定数据从哪里来到哪里去配置数据来源和去向的地址即可 实现外设存储器存储器到存储器存储器到外设的转运 转运起始和终止的地址 闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标 //地址均为32位//外设存储器的基地址DMA_InitStructure.DMA_PeripheralBaseAddr AddrA;//外设存储器的指针自增使能转运后将地址指向下一个数据 Enable-自增 Dissable-不自增 DMA_InitStructure.DMA_PeripheralInc DMA_PeripheralInc_Enable;//存储器的基地址DMA_InitStructure.DMA_MemoryBaseAddr AddrB;//存储器的指针自增使能转运后将地址指向下一个与外设存储器一样来理解DMA_InitStructure.DMA_MemoryInc DMA_MemoryInc_Enable; 一次转运次数结束后自增的指针也会回到最初的位置以便下一次转运。 转运并不会把原有数据拿走是复制了一份 在传输过程中当开启通道(DMA_CCRx的EN1)时不能写更改地址。需关闭通道后再更改地址。 转运方向 DMA_DIR_PeripheralDST peripheral source 存储器到外设 DMA_DIR_PeripheralSRC  peripheral destination 外设到存储器 外设和存储器只是个名字而已重要的是你填的地址  //转运方向:外设到存储器还是存储器到外设DMA_InitStructure.DMA_DIR DMA_DIR_PeripheralSRC;数据宽度 外设和存储器的传输宽度 字节Byte8位半字HalfWord16位全字Word32位 //外设存储器的数据宽度DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_Byte;//储存器的数据宽度DMA_InitStructure.DMA_MemoryDataSize DMA_MemoryDataSize_Byte; 传输次数 可编程的数据传输数目0~65535 这个寄存器只能在通道不工作(DMA_CCRx的EN0)时写入。通道开启后该寄存器变为只读指示剩余的待传输字节数目。寄存器内容在每次DMA传输后递减。 数据传输结束后寄存器的内容或者变为0或者当该通道配置为自动重加载模式时寄存器的内容将被自动重新加载为之前配置时的数值。 当寄存器的内容为0时无论通道是否开启都不会发生任何数据传输 每转运一次就会减去一为0停止 //转运次数DMA_InitStructure.DMA_BufferSize Size; 转运触发方式 每个通道都同样支持软件触发每个通道都直接连接专用的硬件DMA请求。 软件触发 软件触发常用于存储器与存储器之间转运其不能与循环模式同时使用 //软件触发使能 DMA_InitStructure.DMA_M2M DMA_M2M_Enable; 硬件触发 硬件生成DMA请求常用于非存储器与存储器之间转运其能与循环模式同时使用 DMA_InitStructure.DMA_M2M DMA_M2M_Disable; //软件触发不使能 硬件触发需调用对应外设请求//然后再使能外设到DMA的请求的函数比如ADC ADC_DMACmd(ADC1, ENABLE); 如上面DMA框图所示由外设发出DMA请求 硬件触发请求DMA转运前需要初始化特定通道如ADC1的外设请求信号需要DMA1的通道1. 转运模式 DMA_Mode_Normal正常模式转运到传输次数为0停止转运DMA_Mode_Circular循环模式传输次数为0后变为设定值自动重装 DMA_InitStructure.DMA_Mode DMA_Mode_Normal; 当通道配置为非循环模式正常模式时传输结束后(即传输次数变为0)将不再产生DMA转运。要开始新的DMA转运需要在关闭DMA通道的情况下在DMA_CNDTRx寄存器中重新写入传输次数。 在循环模式下最后一次传输结束时DMA_CNDTRx寄存器的内容会自动地被重新加载为其初始数值内部的当前外设/存储器地址寄存器也被重新加载DMA_CPARx/DMA_CMARx寄存器设定的初始基地址。 通道优先级  在同一个DMA模块上多个请求间的优先权可以通过软件编程设置(共有四级很高、高、 中等和低)优先权设置相等时由硬件决定(请求0优先于请求1依此类推) 仲裁器 每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。 //转运通道优先级有四个DMA_InitStructure.DMA_Priority DMA_Priority_Medium; DMA1的通道1  //将上面参数配置到通道1 DMA_Init(DMA1_Channel1, DMA_InitStructure); 开启DMA通道  使能后不可更改转运地址和转运次数 DMA_Cmd(DMA1_Channel1, DISABLE);//不开启通道 DMA初始化框架 DMA_InitTypeDef DMA_InitStructure;DMA_InitStructure.DMA_PeripheralBaseAddr AddrA;DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_Byte;DMA_InitStructure.DMA_PeripheralInc DMA_PeripheralInc_Enable;DMA_InitStructure.DMA_MemoryBaseAddr AddrB;DMA_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_Cmd(DMA1_Channel1, DISABLE);DMA_SetCurrDataCounter(DMA1_Channel1, MyDMA_Size);//设置DMAx通道y的转运次数DMA_Cmd(DMA1_Channel1, ENABLE); DMA应用实例-存储器到存储器转运 DMA.h #ifndef __MYDMA_H #define __MYDMA_Hvoid MyDMA_Init(uint32_t AddrA, uint32_t AddrB, uint16_t Size); void MyDMA_Transfer(void);#endifDMA.c  #include stm32f10x.h // Device headeruint16_t MyDMA_Size;void MyDMA_Init(uint32_t AddrA, uint32_t AddrB, uint16_t Size) {MyDMA_Size Size;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);DMA_InitTypeDef DMA_InitStructure;DMA_InitStructure.DMA_PeripheralBaseAddr AddrA;DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_Byte;DMA_InitStructure.DMA_PeripheralInc DMA_PeripheralInc_Enable;DMA_InitStructure.DMA_MemoryBaseAddr AddrB;DMA_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_Cmd(DMA1_Channel1, DISABLE); }void MyDMA_Transfer(void) {DMA_Cmd(DMA1_Channel1, DISABLE);DMA_SetCurrDataCounter(DMA1_Channel1, MyDMA_Size);DMA_Cmd(DMA1_Channel1, ENABLE);while (DMA_GetFlagStatus(DMA1_FLAG_TC1) RESET);//等待转运完成DMA_ClearFlag(DMA1_FLAG_TC1);//清楚转运完成标志位 }main.c  #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include MyDMA.huint8_t DataA[] {0x01, 0x02, 0x03, 0x04}; uint8_t DataB[] {0, 0, 0, 0};int main(void) {OLED_Init();MyDMA_Init((uint32_t)DataA, (uint32_t)DataB, 4);OLED_ShowString(1, 1, DataA);OLED_ShowString(3, 1, DataB);OLED_ShowHexNum(1, 8, (uint32_t)DataA, 8);OLED_ShowHexNum(3, 8, (uint32_t)DataB, 8);while (1){DataA[0] ;DataA[1] ;DataA[2] ;DataA[3] ;OLED_ShowHexNum(2, 1, DataA[0], 2);OLED_ShowHexNum(2, 4, DataA[1], 2);OLED_ShowHexNum(2, 7, DataA[2], 2);OLED_ShowHexNum(2, 10, DataA[3], 2);OLED_ShowHexNum(4, 1, DataB[0], 2);OLED_ShowHexNum(4, 4, DataB[1], 2);OLED_ShowHexNum(4, 7, DataB[2], 2);OLED_ShowHexNum(4, 10, DataB[3], 2);Delay_ms(1000);MyDMA_Transfer();OLED_ShowHexNum(2, 1, DataA[0], 2);OLED_ShowHexNum(2, 4, DataA[1], 2);OLED_ShowHexNum(2, 7, DataA[2], 2);OLED_ShowHexNum(2, 10, DataA[3], 2);OLED_ShowHexNum(4, 1, DataB[0], 2);OLED_ShowHexNum(4, 4, DataB[1], 2);OLED_ShowHexNum(4, 7, DataB[2], 2);OLED_ShowHexNum(4, 10, DataB[3], 2);Delay_ms(1000);} }代码参考 STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili
http://www.w-s-a.com/news/264042/

相关文章:

  • 做网站设计怎么进企业电子商务网站建设与管理教材
  • 设计广告公司网站建设网站开发技术选择
  • 个人网站教程个人网站有必要备案吗
  • 网站建设推广好做吗黄浦企业网站制作
  • 怎样做28网站代理中山网站建设方案外包
  • vs2010做网站前台搭建小网站
  • 做视频必须知道的一些网站wordpress 标签鼠标滑过_弹出的title 代码美化
  • 怎么做室内设计公司网站电商运营培训视频课程
  • 昆明网站策划天津市建筑信息平台
  • 三亚放心游app官方网站wordpress 个人主题
  • 做简单的网站备案平台新增网站
  • 中国建设网站银行网络营销推广方案整合
  • 网站域名列表dede网站白屏
  • 站长工具一区品牌建设卓有成效
  • 电子商务网站建设案例wordpress批量编辑
  • 想代理个网站建设平台100个最佳市场营销案例
  • 钟表东莞网站建设石家庄做网站时光
  • 织梦 图片网站源码成都建设工程安监局网站
  • 做兼职的网站策划书湖北省建设工程造价信息网
  • 企业网站网址长期做网站应该购买稳定的空间
  • 网站静态化设计html5手机网站制作
  • 深圳最简单的网站建设家居网站建设全网营销
  • 如何取消网站备案佛山网站优化公司
  • 网站开发 成都广水网站设计
  • 音乐网站建设目标合同管理系统
  • jq网站特效插件如何知道网站是否被k
  • 自己的网站怎么接广告网站搭建收费
  • 宁波大型网站制作建立一个网站 优帮云
  • 大连零基础网站建设教学电话有哪些比较好的做ppt好的网站
  • 哪个网站做logo设计我的建筑网