【蓝桥杯-嵌入式 STM32】ADC、DAC
本次实验使用的是蓝桥杯嵌入式大赛的指定开发板,STM32G431R8T6。
下面为 CubeMX 和代码部分
CubeMX
ADC部分
设置引脚选择ADC模式,对应通道选择“Single-ended”(单端输出)。其他默认即可
DAC部分
DAC选择“仅与外部引脚相连”。
生成代码
ad.c
#include "ad.h"
/* ADC读取函数
* 参数 AD结构体的变量
* 返回值 AD读取到的电压(0-3.3V)
*/
double ADC_GetValue(ADC_HandleTypeDef* adcHandle)
{
/* 保存从AD寄存器中读取到的数值 */
unsigned int value;
HAL_ADC_Start(adcHandle);
/* 读取ADC中寄存器的值 */
value = HAL_ADC_GetValue(adcHandle);
/* 数据处理,转化为电压值 */
return value * 3.3 / 4095;
}
/* DAC输出函数
* 参数 DAC结构体、通道值、数据对其格式、输出的电压值
*/
void DAC_OUT(DAC_HandleTypeDef* dacHandle, uint32_t Channel, uint32_t Alignment, double value)
{
uint32_t v_data;
/* 开启DAC输出 */
HAL_DAC_Start(dacHandle, Channel);
/* DAC输出 */
v_data = value / 3.3 * 4096;
HAL_DAC_SetValue(dacHandle, Channel, Alignment, v_data);
/* DAC关闭 */
HAL_DAC_Stop(dacHandle, Channel);
}
ad.h
#ifndef __AD_H_
#define __AD_H_
#include "main.h"
double ADC_GetValue(ADC_HandleTypeDef* adcHandle);
void DAC_OUT(DAC_HandleTypeDef* dacHandle, uint32_t Channel, uint32_t Alignment, double value);
#endif
主函数功能验证部分
while (1)
{
/* ADC数据采集显示 */
adc1_value = ADC_GetValue(&hadc1);
adc2_value = ADC_GetValue(&hadc2);
sprintf(lcd_string,"ADC1 = %.3f",adc2_value);
LCD_DisplayStringLine(Line1, (unsigned char *)lcd_string);
sprintf(lcd_string,"ADC2 = %.3f",adc1_value);
LCD_DisplayStringLine(Line2, (unsigned char *)lcd_string);
/* 将采集到的ADC电压通过DAC输出 */
DAC_OUT(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,adc1_value);
sprintf(lcd_string,"PA4 DAC = %.3f",adc2_value);
LCD_DisplayStringLine(Line3, (unsigned char *)lcd_string);
}
演示教程视频
相关文章
【蓝桥杯-嵌入式 STM32】PWM输入捕获,获取频率占空比
本次实验使用的是蓝桥杯嵌入式大赛的指定开发板,STM32G431R8T6。 下面为 CubeMX 和代码部分 CubeMX 选择对应引脚,配置为定时器模式,设置通道一路为“Input Captu direct mode”(输入捕获直接模式用于读取周期)、一路为“Input Captu inindirect mode”(输入捕获间接模式用于计算占空比)。 预分频(PSC)设置为(时钟频率-...
PWM输出——频率占空比可调【STM32】
本次实验使用的是蓝桥杯嵌入式大赛的指定开发板,STM32G431R8T6。 下面为 CubeMX 和代码部分 CubeMX定时器配置部分 选择对应引脚的通道设置为PWM输出模式(不要选择CH\*N)。 以获取一个100Hz,占空比为50的脉冲信号,现在设置时钟频率为80MHz,参数设置中PSC,ARR需要我们自己配置(当然我们后期实现代码修改频率、占空比的时候会修改这些数据)。 公...
按键判断单击、双击、长按【STM32】
本次实验使用的是蓝桥杯嵌入式大赛的指定开发板,STM32G431R8T6。 下面为CubeMX和代码部分 CubeMX配置 将按键引脚设置为双边沿中断触发模式,并设置上拉电阻。 定时器本次选择TIM3,选择内部时钟源,设置PSC为80-1,COUNTER Period为1000-1,实现1ms定时(频率为80MHz) 并打开定时器中断。 Key.c ``` #inc...