STM32F103的ADC通道映射

ADC通道映射
STM32F103带3个ADC控制器,一共支持23个通道,包括21个外部和2个内部信号源。ADC1控制器最多有18个通道,包括16个外部和2个内部信号源。

ADC1和ADC2的16个外部通道相同,且ADC1和ADC2共用一个系统中断向量,ADC1不支持DMA,ADC2不支持DMA。可以配置ADC1和ADC2采集同一个通道的信号,达到单个ADC两倍的采样率。

ADC3的中断有自己的中断向量, 可以配置DMA。

对应的代码:

    /* ADC规则通道序列和采样时间配置 */

//PC0和PC1端口的adc 通道的配置
    ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_239Cycles5);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_239Cycles5);

### STM32F103 ADC通道数据采集使用DMA寄存器配置 对于STM32F103系列微控制器而言,通过DMA进行ADC通道数据采集是一种高效的方法来获取模拟信号转换后的数字值。为了实现这一功能,需要正确设置多个寄存器以确保ADC和DMA之间的协调工作。 #### 配置过程概述 - **使能外设时钟**:首先应当开启ADC以及DMA模块所需的APB2和AHB总线上的相应时钟。 - **初始化ADC参数**:设定采样时间、分辨率等基本属性;指定要使用的规则组内的通道数目及其顺序。 - **配置DMA流/通道**:选择合适的请求映射表项(Request Mapping Table Entry),并将该条目关联至特定的外围设备事件触发源——这里是ADC完成一次完整的扫描序列之后发出的通知。 - **建立缓冲区地址与大小**:告知DMA引擎目标存储区域的位置及预期接收的数据量级数。 - **激活连续模式和支持特性**:允许持续不断地从选定传感器读取新样本直至应用程序显式终止操作为止[^1]。 具体来说,在实际编程实践中涉及到的主要控制位如下: | 寄存器名称 | 描述 | | --- | --- | | `ADC_CR2` | 控制寄存器CR2用于启动ADON位以打开模数转换器电源,并且可以通过CONT位启用连续转换模式。| | `ADC_SQRx` | 此处定义了规则序列中的各个成员身份即所选输入端口编号,还有整个列表长度。| | `DMA_CCr` | 位于DMA控制器内部的关键结构之一CCr负责指明传输方向、优先权级别、循环方式开关等等选项。| 下面给出一段C语言代码片段作为实例说明上述理论知识点的应用情况: ```c #include "stm32f1xx_hal.h" // 假定已经完成了必要的硬件资源声明与分配... void Configure_ADC_DMA(void){ /* 初始化 DMA */ hdma_adc.Instance = DMA1_Channel1; hdma_adc.Init.Direction = DMA_PERIPH_TO_MEMORY; // 数据流向是从外设到内存 hdma_adc.Init.PeriphInc = DMA_PINC_DISABLE; // 不增加外设基址 hdma_adc.Init.MemInc = DMA_MINC_ENABLE; // 内存地址自动增量 hdma_adc.Init.PeriphDataAlignment= DMA_PDATAALIGN_HALFWORD;// 半字对齐 hdma_adc.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_adc.Init.Mode = DMA_CIRCULAR; // 循环模式 hdma_adc.Init.Priority = DMA_PRIORITY_HIGH; HAL_DMA_Init(&hdma_adc); __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc); // 将DMA句柄链接到ADC句柄 hadc.Instance = ADC1; // 设置为连续转换模式并开启DMA请求 MODIFY_REG(hadc->Instance->CR2, (ADC_CR2_CONT | ADC_CR2_DDS), ((uint32_t)(ENABLE << ADC_CR2_CONT_Pos)) | ((uint32_t)(DISABLE << ADC_CR2_DDS_Pos))); // 启动ADC校准程序... } ``` 这段代码展示了如何利用库函数简化底层细节的同时保持灵活性,从而快速搭建起一个稳定可靠的测量平台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值