STM32单片机基础21——使用ADC读取电压值

本文详细介绍了如何使用STM32CubeMX配置STM32L431RCT6的ADC,以读取DAC输出引脚的电压值。通过选择芯片型号、配置时钟源、设置串口、配置DAC和ADC,然后在MDK中编写、编译和下载用户代码,实现了ADC的单次转换模式读取。
摘要由CSDN通过智能技术生成

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的ADC外设,读取DAC输出引脚的电压值。

1. 准备工作

硬件准备

mark

软件准备

  • 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码;

Keil MDK和串口助手的安装包都可以关注“小熊派开源社区”微信公众号,在资料教程一栏中可获取安装包。

2.生成MDK工程

选择芯片型号

打开STM32CubeMX,打开MCU选择器:

搜索并选中芯片STM32L431RCT6:

配置时钟源

  • 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC;
  • 如果使用默认内部时钟(HSI),这一步可以略过;

这里我都使用外部时钟:

配置串口

小熊派开发板板载ST-Link并且虚拟了一个串口,原理图如下:

这里我将开关拨到AT-MCU模式,使PC的串口与USART1之间连接。

接下来开始配置USART1

配置DAC

确定DAC输出通道

查看小熊派E53接口的原理图:

配置DAC

选择DAC1,开启输出通道2,配置保持默认即可:

配置ADC

知识小卡片 —— ADC

ADC全称 Analog

STM32中,ADC可以用来读取模拟电压。以下是一个简单的示例程序,演示如何使用STM32ADC读取电压: ``` #include "stm32f10x.h" void adc_init(void) { //使能ADC1时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //设置ADC1输入通道为ADC1通道16(PC0) ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_239Cycles5); //使能ADC1 ADC_Cmd(ADC1, ENABLE); //校准ADC1 ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); } u16 adc_get_value(void) { //启动ADC转换 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //等待转换完成 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); //返回转换 return ADC_GetConversionValue(ADC1); } float adc_get_voltage(void) { //读取ADC转换 u16 adc_value = adc_get_value(); //计算电压 float voltage = (float)adc_value * 3.3 / 4096; return voltage; } int main(void) { //初始化ADC adc_init(); while(1) { //读取电压 float voltage = adc_get_voltage(); //等待一段时间 for(int i=0; i<1000000; i++); } } ``` 在上面的代码中,我们首先需要初始化ADC,然后使用adc_get_voltage()函数读取电压。注意,上面的代码中假设使用的是ADC1通道10,如果需要使用其他通道,请修改ADC_RegularChannelConfig()函数的参数。另外,上面的代码中假设使用的是3.3V电压参考,如果使用其他电压参考,请修改adc_get_voltage()函数中的计算公式。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值