DMA带中断的内存到内存传输

要使用中断配置 dma,请按照内存到内存模式部分中详述的步骤进行操作。
在system core 》 nvic中启用dma1 channel 1 global interrupt如下图所示:
现在按以下键生成代码:ctrl + s
4.1 hal 库 dma 与 it 流程↑
dma 初始化在main.c中生成。
hal_dma_start_it:开始dma缓冲区传输
dma1_channel1_irqhandler 在stm32f4xx_it.c中生成:它指示 dma 过程是半/完成还是检测到错误。
hal_dma_irqhandler定义在stm32f4xx_hal_dma.c:处理中断信息。
dma_xfercpltcallback:数据正确传输完成回调函数。
dma_xfererrorcallback:检测到错误错误回调函数。
4.2 it 配置的 dma m2m↑
我们将使用与 dma m2m 配置中相同的代码。
在标签/* user code begin 0 */和/* user code end 0 */之间插入您的代码
/* 用户代码开始 0 */
void xfercpltcallback ( dma_handletypedef * hdma );
uint8_t buffer_src [] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 };
uint8_t buffer_dest [ 10 ];
/* 用户代码从 0 开始 */
在标签/* user code begin 4 */和/* user code end 4 */之间插入您的代码
/* 用户代码开始 4 */
void xfercpltcallback ( dma_handletypedef * hdma )
{
__nop (); //仅当传输成功时才到达线路。在此处切换断点
}
/* user code end 4 */
在使用中断启动 dma 之前,我们需要将回调设置为 dma 结构。
然后,可以使用 hal_dma_start_it 开始 dma 传输。
在标签/* user code begin 2 */和/* user code end 2 */之间插入您的代码
/* 用户代码开始 2 */
hdma_memtomem_dma1_channel1 。 xfercpltcallback =& xfercpltcallback ;
hal_dma_start_it ( & hdma_memtomem_dma1_channel1 ,( uint32_t ) buffer_src , ( uint32_t ) buffer_dest , 10 );
/* 用户代码结束 2 */
4.3编译烧录↑
点击调试一步步运行
点击resume继续执行
如果您在回调函数中切换断点,执行应该会自动停止。将buffer_src和buffer_dest
添加到expressions中,在 stm32cubeide 的右侧,以监控它们的值。源数据已传输到目标缓冲区。

风机轴承座磨损快速维修方法,选对技术很重要
企业是怎样实现场景化的
计算航天器找到其他恒星系统需要多久的时间
花上三分钟来听听 大神眼中的区块链和比特币
AI“红娘” 让婚恋匹配更精准 婚恋新时代或将来临
DMA带中断的内存到内存传输
Ameco为飞机客舱提供了一站式技术解决方案
世界杯一来,区块链火焰再次窜高
小米MIUI8再升级:防火防盗防秘密,微信专清、分身应用分别加锁
关于1.5L双燃烧循环自然吸气发动机性能分析和应用
AI、自动化及数字资产开始交汇,共同形成金融领域的未来趋势
日本电信巨头NTT宣布将研发属于自己的5G网络
太阳能电池如何制作_太阳能电池制作流程
一文详解CPU、内存、GPU知识
设计过程已成为外卡 脚本不足以支撑
蓝牙无线技术在灯光远程控制方面的应用
辨别PCB线路板好坏可以从两个方面入手
如何为卫星应用选择合适的LDO(耐辐射低压降稳压器)
泰治科技助力PCB工厂提升“智”造力
AUGIA无线电子门铃按钮的内部结构原理分析