【单片机学习笔记】(21):复用和重映射、DMA存储器到存储器、串口DMA使用、debug查看变量、常用存储器

端口重映射

 

直接存储器访问控制

DMA(Direct Memory Access )可以在无需任何CPU操作的情况下快速移动数据。

DMA__CCR   位四是DIR设置:1表示从存储器到外设,0表示从外设到存储器

使用流程:

  1. 建立(选取)传输通道

       存储器到存储器,外设到存储器 ,存储器到外设

      

  1. 确定传输对象

       UART-内存   , 内存-UART

  1. 敲定传输细节

       优先级 ,确定由谁来产生DMA请求,外设的DMA请求对应通道 、确定传输数据双方的数据格式、确定数据是否需要一直采集,是否需要传输标志|中断,

F4还多了双缓冲模式(可以分时填充两块区域)FIFO功能|单次传输和突发传输(FIFO的数据宽度随源变化,先行进行封装)

单次传输:一次请求触发一次传输    突发传输:一个请求可触发多次传输(4\8\16)

这里很重要,不然会出现传输数据错误

Increment 增加

HAL库的初始化函数中有Instance 和Init

__HAL_LINKDMA(uartHandle, hdmarx,  hdma_usart1_rx)

hdmarx是uartHandle的 成员 ,第三个参数是赋给hdmarx的值

DMA communition parameters  交流参数

设置好后调用HAL_DMA_Start(&DMA_Handle, 源数据地址,目标地址)  //如果是数组的地址的话,直接放数组名就行

对于数组来说,下面两个都对。但是对一个变量来说,需要加取地址符

HAL_DMA_Start(&DMA_handle, (uint32_t)aSRC_Const_Buffer, (uint32_t)aDST_Buffer, BUFFER_SIZE);

HAL_DMA_Start(&hdma_memtomem_dma1_channel1, (uint32_t)&aSRC_Const_Buffer, (uint32_t)&aDST_Buffer, BUFFER_SIZE);

可以用DMA_status = HAL_DMA_Start(……), 然后再接一个判断判断DMA数据流参数配置是否成功的函数 。

DMA的板级支持包编写完毕后再主函数中调用其初始化函数,然后使用while( HAL_DMA_GET_FLAG(&DMA_Handle, DMA_FLAG_TC6)==DISABLE){ }来等待DMA传输完成

之后可以调用Buffercmp(源数据地址,目标数据地址, BufferLength)来比较传输的数据是否正确。   Buffer 缓冲区

DMA:从存储器到存储器

通过调试发现:多传输几个字节的数据,再调用数据对比函数就会出现数据不相符合。

当数组作为函数入口参数时,其前面括号的作用是

DMA:从存储器到外设(串口)

Debug查看变量

Cnanot evaluate

必须是当前断点处所在的函数里面有这个参数才行,或者是全局变量.

变量Not in the scope

常用存储器类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值