我用的是ADC1,通道分别是CHANNEL 1 CHANNEL 2 CHANNEL 3
CUBEMX配置如图所示。



| Mode(工作模式) | Independent mode(独立模式) | 在同一引脚上仅有一个ADC在采集模拟信号 |
| Data Alignment(数据对齐) | Right alignment(数据右对齐)/Left alignment(数据左对齐) | |
| Scan Conversion Mode(扫描模式) | ENABLE(使能)/DISABLE(禁止) | 当有多个通道需要采集信号时必须开启扫描模式,此时ADC将会按设定的顺序轮流采集各通道信号 |
| Continuous Comverion Mode(连续转换模式) | ENABLE(使能)/DISABLE(禁止) | 连续转换模式将会在上一次ADC转换完成后立即开启下一次转换 |
| Discontinuous Comverion Mode(单次转换模式) | ENABLE(使能)/DISABLE(禁止) | 单次转换模式ADC只采集一次数据就停止采集,使用单次转换模式需要转换通道数大于1 |
| Enable Regular Conversions(规则通道控制) | ENABLE(使能)/DISABLE(禁止) | 需要使能规则通道控制才可以进一步对规则通道的使用进行配置 |
| Number Of Conversion(ADC转换通道数) | 按照实际使用的通道数进行选择,会影响可供设置的通道数量 | |
| External Trigger Conversion Source(外部触发转换模式) | Regular Conversion Launched by software(软件控制触发) | ADC需要在接收到到触发信号后才开始模数转换,可以被定时器触发、外部中断触发、软件触发 |
| RANK(模拟信号采集及转换的次序) | ||
| Channel(ADC转换通道) | ||
| Sampling Time(采样周期) | ADC采样时间计算公式:TCONV=采样周期+12.5各周期 | |
| ADC_Injected_ConversionMode(注入通道模式) | 一般情况下不需要使用注入通道,可以将注入通道认为是ADC中断,即打断规则通道的采样进程执行注入通道的采样 | |
| Enable Regular Conversions(注入通道控制) | ENABLE(使能)/DISABLE(禁止) | 需要使能注入通道控制才可以进一步对注入通道进行配置 |
| Number Of Conversion(ADC注入转换通道数) | 按照实际使用的通道数进行选择,会影响可供设置的注入通道数量 | |
| External Tigger Source(外部触发模式) | ||
| Injected Conversion Mode(注入转换通道模式) | ||
| Rank(注入转换通道大于0时才可对其配置,后面的数字代表顺序) | ||
| Channel(转换通道) | ||
| Sampling Time(转换时间) | ||
| Injected Offset(注入通道偏移量) | ||
| WatchDog(看门狗) | ||
| Enable Analog WatchDog Mode(使能模拟量看门狗模式) | 需要选中本项才可对看门狗进行进一步的设置 | |
| Watchdog Mode(看门狗模式) | (监测单一通道的规则通道) (监测单一通道的注入通道) (监测单一通道的规则及注入通道) | |
| Analog WatchDog Channel(看门狗通道) | ||
| High Threshold(高阈值) | ||
| Low Threshold(低阈值) | ||
| Interrupt Mode(看门狗中断) | ||
DMA配置如图所示。

main.c代码
uint32_t ADC_Value[2];//ADC采集存储
// uint8_t i;
// float ad1,ad2,ad3;
// for(i=0;i<3;i++)
// {
// HAL_ADC_Start(&hadc1);
// HAL_ADC_PollForConversion(&hadc1,0xffff);
// ADC_Value[i]=HAL_ADC_GetValue(&hadc1);
// }
// HAL_ADC_Stop(&hadc1);
// ad1 = (float)(ADC_Value[0]&0xFFF)*2.5/4096;
// debug_printf( "%lf\r\n" , ad1);
//
// ad2 = (float)(ADC_Value[1]&0xFFF)*2.5/4096;
// debug_printf( " %lf\r\n" , ad2);
//
// ad3 = (float)(ADC_Value[2]&0xFFF)*2.5/4096;
// debug_printf( " %lf\r\n" , ad3);
//
// HAL_Delay(1000);
串口输出结果图。

三个通道的数值,有点难看,凑合看,自己打的时候可以\r\n分一下行。
2891

被折叠的 条评论
为什么被折叠?



