stm32f405rgt6 adc 和dac
时间: 2025-02-11 07:20:37 浏览: 89
### STM32F405RGT6 ADC 和 DAC 功能及编程指南
#### 一、ADC (模数转换器)
STM32F405RGT6 配备了一个12位分辨率的逐次逼近型模拟到数字转换器(ADC),能够支持多达18个通道的选择,可以测量内部或外部信号源。此器件允许通过软件配置来选择单端输入模式或多差分输入模式。
- **采样速率**: 支持高达每秒几百万样本(MSPS)[^1]。
- **多通道扫描**: 可以设置多个通道按顺序自动连续采集数据。
- **触发机制**: 转换可以通过定时器事件或其他中断请求启动;也可以由DMA直接控制完成批量传输操作。
对于初始化和使用ADC,在程序中通常需要执行如下几个主要步骤:
```c
// 初始化结构体变量用于存储参数设定值
ADC_HandleTypeDef hadc;
// 设置默认参数作为起点
HAL_ADC_Init(&hadc);
// 启动一次单独读取过程
if(HAL_OK != HAL_ADC_Start(&hadc))
{
// 错误处理逻辑...
}
uint32_t value;
// 执行同步方式下的阻塞等待直到获取有效结果
if(HAL_OK == HAL_ADC_PollForConversion(&hadc, HAL_MAX_DELAY))
{
value = HAL_ADC_GetValue(&hadc);
}
```
#### 二、DAC (数模转换器)
该款MCU内置有两个独立工作的12-bit精度电压输出型DAC模块,它们可以直接连接至任意指定引脚上实现模拟量生成。每个DAC都有自己的缓冲寄存器和支持多种工作模式,比如波形发生器或者双缓冲更新等功能特性。
为了激活并配置DAC,下面给出了一段简单的C语言代码片段展示如何开启特定通道并将预设数值映射成相应的物理电平:
```c
// 定义要使用的DAC句柄对象实例化
DAC_ChannelConfTypeDef sConfig = {0};
// 填充必要的成员属性值准备传递给函数调用者
sConfig.DAC_Trigger = DAC_TRIGGER_NONE; // 不采用任何触发条件
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;// 开启输出缓存提高稳定性
// 对选定的目标设备进行基本状态重置以便重新加载新参数集
__HAL_RCC_DAC_CLK_DISABLE();
__HAL_RCC_DAC_FORCE_RESET();
__HAL_RCC_DAC_RELEASE_RESET();
// 解锁写保护防止意外修改关键配置项
__HAL_RCC_DAC_CONFIG_GLOBAL_ENABLE();
// 实际创建一个新的DAC实体关联具体硬件资源编号
if(HAL_OK != HAL_DAC_Init(&hdac))
{
// 处理错误情况...
}
// 将上述构建好的配置信息应用于实际存在的DAC组件之上
if(HAL_OK != HAL_DAC_ConfigChannel(&hdac,&sConfig,DAC_CHANNEL_1))
{
// 应对可能发生的异常情形...
}
// 设定期望产生的直流偏移等级范围内的整数值表示形式
uint32_t level = ((uint32_t)(Vref * DesiredVoltage / MaxOutput)) >> 4;
// 发送指令使能所选信道上的DA变换流程正式开始运行起来
if(HAL_OK != HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_R,level))
{
// 出现问题后的恢复措施...
}
```
阅读全文
相关推荐

















