ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

STM32CubeMx开发之路—12使用ADC和DAC

STM32CubeMx开发之路—12使用ADC和DAC STM32CubeMx开发之路 — 使用ADC和DAC运行环境Windows10STM32CubeMXVersion 5.2.0Keil5(MDK5)Version 5.28.0.0芯片STM32F103ZE简介本例程主要讲解如何使用ADC和DACSTM32CubeMx基本配置基础配置过程请参考STM32CubeMx(Keil5)开发之路—配置第一个项目CubeMX配置调试打印配置ADC配置1.选择ADC2.选择IN03.选择好了会发现相应的输入管脚DAC配置1.选择DAC2.选择OUT1 Configuration3.选择好了会发现相应的输出管脚代码修改添加代码(讲解写在代码里面)/* USER CODE BEGIN 0 */ /* 使用printf功能 */ int fputc(int ch, FILE *f) { HAL_UART_Transmit(huart1, (uint8_t *)ch,1, 0xFFFF); return ch; } /* USER CODE END 0 */main函数int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); MX_ADC1_Init(); MX_DAC_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { static double SetVcc 0; static uint16_t ReadVcc; SetVcc SetVcc 0.5; if(SetVcc 3.3) { SetVcc 0; } /* 设置DAC输出的电压 */ HAL_DAC_SetValue(hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, (SetVcc / 3.3 * 4096)); HAL_DAC_Start(hdac, DAC_CHANNEL_1); /* 打印 */ printf(PA0 set voltage:%.4f\n, SetVcc); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_ADC_Start(hadc1); HAL_ADC_PollForConversion(hadc1, 50); if(HAL_IS_BIT_SET(HAL_ADC_GetState(hadc1), HAL_ADC_STATE_REG_EOC)) { /* 读取ADC的电压 */ ReadVcc HAL_ADC_GetValue(hadc1); /* 打印 */ printf(PA4 read voltage:%.4f\n, ReadVcc * 3.3f / 4096); } HAL_Delay(1000); } /* USER CODE END 3 */ }测试运行这儿我们将PA0和PA4管脚短接起来,ADC读取我们DAC的输出烧录程序,复位之后,使用串口调试助手查看打印信息发现设置的值和读取到的值相差很小说明测试没问题源码STM32F103ze_ADC_DAC.rar小结很多地方都会用到ADC和DAC,比如音频,温度计,示波器等源代码获取源码仓库: 码云仓库
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进