简介
基于前面的文章, 缩略STM32CubeMx创建项目的过程,直接添加ADC相关初 始化;
开发板 : Bearpi Std(小熊派标准板)
主芯片: STM32L431RCT6
LED : PC13 \ 推挽输出即可 \ 高电平点亮
串口: Usart1
ADC1: PC2
步骤
- 创建STM32CubeMX
LED/串口 - ADC1初始化
a. 设置ADC1 通道3单通道输入
b. 设置ADC时钟
c. ADC1 配置
添加DMA设置
采样设置
12bit 采样 / 连续转换启用 / DMA启用
采样速率
- 生成工程 BearPi_ADC14. 加入用户代码
int main()
{
/* USER CODE BEGIN 1 */
int16_t adcValue = 0;
float voltage = 0.0;
/* USER CODE END 1 */
...
/* USER CODE BEGIN 2 */
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&adcValue, 1); // 开启ADC 采样
/* USER CODE END 2 */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
voltage = adcValue * 3.3 / 4096;
printf("ADCValue: %d, ADCValue: %f\r\n", adcValue, voltage);
HAL_Delay(1000);
}
/* USER CODE END 3 */
...
}
/* USER CODE BEGIN 4 */
/* 采样回调 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
if(hadc->Instance == ADC1)
{
HAL_GPIO_TogglePin(USER_LED_GPIO_Port, USER_LED_Pin);
}
}
/* USER CODE END 4 */
前言后说
Vout = Vref * (D / 2^n)
其中Vref代表参考电压,
n为DAC的位数,
D为DAC输入的数字信号。
例如,假设有一个12位分辨率的DAC,参考电压为5V,那么当输入的数字信号为4095(即二进制的111111111111)时,
输出电压应为:Vout = 5V * (4095 / 2^12) = 2.5V。这是因为在这个例子中,
12位DAC的分辨率是2^12,所以最大的输入数字信号是2^12-1=4095。
当输入的数字信号小于最大值时,输出电压会随着输入信号的增大而线性增大;
当输入的数字信号大于最大值时,输出电压将会保持在最大值不变。
本例是12位DAC的分辨率, 且芯片引用电压是3.3V : 公式为 Vout = 3.3 * D / 4095
完整BearPi_ADC1代码