STM32实验及结果 —— (005)HAL库认识DMA
»
(001)HAL库LED点灯
(002)HAL库LCD帧动画
(003)HAL库FFT动态频谱
(004)HAL库FFT Speed Up
(005)HAL库认识DMA
(006)看门狗总结
(007)GPIO使用步骤
(008)CubeIDE实现USB外设*
(009)为什么C99
(010)Linux UDP广播注意事项
(011)Linux非阻塞TCP
(012)ARM架构防烧脚本
(013)OpenWrt交叉编译
(014)C99基本数据类型
(015)C99 结构体
(016)C99 枚举
(017)C99 的函数及左值右值
(018)C99 的指针*
(019)C99 只有值赋值,没有move*
(020)C99 数组及结构体中的数组存储空间
(021)C99标准函数库没有函数模板
(022)POSIX线程库pthread的同步锁*
(023)POSIX线程库pthread的多线程*
(024)C99的条件语句
(025)C99的选择语句
(026)C99的循环语句
(027)C99标准库中的计时与等待 *
(028)C语言中的高精度计算库GMP *
(029)C语言中的Web服务*
(030)C语言中的字符转码ICU*
(031)从几个方面显然C语言比C++效率高*
(032)C99中的弱函数weak
(033)MTU TCP SOCKET
(034)STM32 UART连续发送数据函数
(035)STM32 UART连续接收数据函数
(036)STM32重定向printf输出到USART的方法
(037)STM32 Normal与Circle
(038)STM32 UART传输错误标志位的清除
(039)STM32 UART传输空闲中断
(040)STM32 串口、RS232是单根线发数据
(041)STM32 RS485差分信号通信
(042)STM32 等待DMA传输完成指定的字节数
(043)STM32进入低功耗模式
(044)DMA传输完成中断需要清空TCx标志位
(045)单字节中断HAL_UART_RxCpltCallback
(046)在单字节完成中断中处理Idle
(046)C99内置宏
🍓(001)关闭交换分区
🍓(002)格式化U盘为ext4并设定块大小为1k
🍓(003)获取linux版本信息及硬件架构信息
🍓(004)最新版Ubuntu加速
🍓(005)不稳定网络克隆360浏览器内核脚本
🍓(006)Ubuntu24.04无法运行firefox注意事项
🍓(007)MAC地址
🍓(008)RMII和PHY
🍓(009)Ubuntu Server防火墙配置
🍓(010)Linux主动让出CPU
🍓(011)Linux硬件概念
🍓(012)Linux系统中的进程间通信
🕹️(001)while(1){}不会让出CPU
🕹️(002)FreeRTOS主要函数
🕹️(003)FreeRTOS临界区ENTER_CRITICAL
🕹️(004)FreeRTOS NULL未定义问题的解决
🕹️(005)优先级最低的ARM硬件中断PENDSV
🕹️(006)任务优先级层数配置
🕹️(007)不同优先级任务创建注意事项
🕹️(008)关闭同级任务的时间片轮转
🕹️(009)OTA技术
🕹️(010)FreeRTOS静态任务创建
🕹️(011)FreeRTOS列出任务列表
🕹️(012)FreeRTOS堆空间使用量统计
🕹️(013)FreeRTOS通过任务名获取TaskHandle
🕹️(014)FreeRTOS常用任务创建方式
🕹️(015)FreeRTOS解决优先级反转的任务死锁
🕹️(016)FreeRTOS超级中断:SVC
🕹️(017)FreeRTOS中断处理函数运行在特权级
🕹️(018)FreeRTOS SVC进入用户模式的方法
🕹️(019)FreeRTOS实现绝对时间间隔开始任务
🕹️(020)FreeRTOS低功耗通过Tickless实现
🕹️(021)FreeRTOS IdleHook
🕹️(022)FreeRTOS Hooks
🕹️(023)FreeRTOS主动让出CPU
🕹️(024)FreeRTOS信号量
🕹️(025)FreeRTOS解决优先级反转问题的方法
🕹️(026)FreeRTOS获得任务的优先级
🕹️(027)FreeRTOS设置任务的优先级
🕹️(028)FreeRTOS中函数的前缀
🕹️(029)硬件中断中不能调用FreeRTOS的函数
🕹️(030)底半操作的任务接收信号量处理数据
🕹️(031)启用无限期等待
🕹️(032)中断处理函数中调用FreeRTOS的函数
🕹️(033)对于FreeRTOS顶半与底半操作的原则
🕹️(034)STM32中的FATFS支持exFat
🕹️(035)FreeRTOS中的消息队列
🕹️(036)FreeRTOS中的定时任务
🕹️(037)默认生成代码没法ping板子的原因
🕹️(038)LwIP Tcp Server开发例程
    今天开始琢磨ADC与DMA的搭配。关键函数是:DMAx_Channelx_IRQHandler与HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&dma1_adc1_storage_zone, 35714/2);。
    DMA是自动的数据搬运很有印象。但,一直认为DMA做的事情是所有次数的ADC操作完成后再做一次数据的迁移。而这个认识是错误的。
    正确的理解是:ADC的电路每次完成数据读取后,就需要把数据搬运走。因为,ADC中没有内存。所以,如果配置了DMA,ADC的每一次完成数据读取都会请求DMA硬件搬运ADC硬件上的一次转换结果到内存。而,这个ADC请求DMA的过程不需要CPU参与,这就是DMA的电路做的事情。
    而咱们程序中写的HAL_ADC_ConvCpltCallback函数是ADC_DMAConvCplt函数会调用的子函数,是全局中断的回调函数,也就是ADC_DMA单次转换完成的回调函数。

    总结调用过程就是:xxxxCpltCallback是单字节转换完成的钩子函数DMAx_Channelx_IRQHandler是DMA全部传输完成(TCx时)才会中断的函数。

    所以,第一,ADC与DMA通道的搭配,DMA通道可以收集多次ADC转换结果;第二、DMA通道满载中断处理函数是DMAx_Channelx_IRQHandler,在Channel满载处理函数钟,首先要做的就是拷贝走DMA通道目标存储区域的数据,其次再做数据的处理;第三、不能在中断处理函数中运行时间复杂度较高的程序代码。
    ————www.v-signon.com学习者共勉
                        
«
——张人杰·www.v-signon.com学习者共勉
返回上一页
备案号:京ICP备19038994号-2
个人作品网站:www.up-task.com 主办:个人 English
免责声明:本网站3d地球模型购买自3d.3d66.com,如权利人发现存在误传其作品情形,请及时与本站联系。