STM32实现DMA读取ADC数据

昨天学习了DMA写了一个用DMA读取ADC数据的程序,记录下整个过程和一点心得

 

DMA配置详细说明

(MDK的汉字2复制过来就是乱码,我重新打了一遍注释,晕~)

//DMA1各通道配置
//外设->存储器/16位数据宽度
//DMA_CHx:DMA通道CHx
//cpar:外设地址
//cmar:存储器地址
//cndtr:数据传输量(因为我是一个16位的数据,所以是一)
void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);    //使能DMA时钟
    
    DMA_DeInit(DMA_CHx);   //重设DMA为缺省值

    DMA_InitStructure.DMA_PeripheralBaseAddr = cpar;  //外设地址
    DMA_InitStructure.DMA_MemoryBaseAddr = cmar;  //存储器地址
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  //外设到存储器的传输模式
    DMA_InitStructure.DMA_BufferSize = 1;  //数据量为1(应该为cndtr参数)
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;  //
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_P
  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在使用STM32F103芯片进行DMA中断读取ADC的程序中,首先需要初始化ADCDMA。 初始化ADC时,需要设置ADC的通道、采样周期和转换模式。通道用于选择ADC输入的通道,采样周期用于设置ADC的转换速率,转换模式用于选择ADC的工作模式。 初始化DMA时,需要设置DMA的通道、传输方向、数据宽度和传输数量。通道用于选择DMA传输使用的通道,传输方向用于设置数据的传输方向(从ADC读取还是向其他外设写入),数据宽度用于设置每次传输的数据宽度(比如8位或12位),传输数量用于设置传输的次数。 接下来,需要配置DMA中断,通过DMA中断来触发数据读取和处理。配置DMA中断需要设置中断触发源和优先级。中断触发源可以选择DMA传输完成或者半传输完成来触发中断,优先级可以用于设置中断的执行顺序。 在程序中,可以通过编写中断服务函数来处理DMA中断。中断服务函数中可以读取ADC数据并进行相应的处理,比如存储数据、计算平均值或者发送到其他外设。 最后,需要在主函数中使能ADCDMA和中断,并且进入主循环以保持程序运行。在主循环中可以执行其他任务,并定期检查ADCDMA状态以确保数据传输正常。 总结起来,实现STM32F103芯片的DMA中断读取ADC程序需要进行ADCDMA的初始化配置,编写中断服务函数来处理数据读取和处理,并在主函数中使能相关模块并进入主循环。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值