
```mermaid 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_DMA_Init(); MX_USART1_UART_Init(); MX_ADC1_Init(); MX_ADC2_Init(); /* USER CODE BEGIN 2 */ /*执行ADC自动自校准校准前提:ADC必须被禁用(在执行HAL_ADC_Start()之前或者在HAL_ADC_Stop()之后执行此函数)。*/ HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED); HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED); HAL_UART_Receive_IT(&huart1, (uint8_t*)&RxData, 1); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_ADC_Start(&hadc1);//启用 ADC,开始常规组的转换。 //dcbusval[0]=HAL_ADC_GetValue(&hadc1);//*0.015430500427*10; dcbusval[0]=HAL_ADC_GetValue(&hadc1)*0.015430500427; memcpy(vofaData,(uint8_t *)&dcbusval,sizeof(dcbusval)); HAL_UART_Transmit_DMA(&huart1,vofaData,12);//将vofaData通过串口1以DMA方式传输,不以串口传输 HAL_Delay(1); } /* USER CODE END 3 */ } ` 按照上述代码,ADC1的通道1和2,1是电压,2是温度,这样按照上述写法,1,2通道会相互影响;所以怎么样才能区分出来是那个通道想要将采集的数传出去`` |
stm32F723ZET6使用ADC捕获正弦波,adc采样频率过高导致主函数无法运行,要怎么优化?
motor profiler参数识别卡在7%是什么原因啊,电机只响不动,手动旋转有阻力,顿感
LIS2MDL X轴数据读取问题
ADC差分采样
STEVAL-PTOOL4A开发板资料求助
STSPIN32G4的AN5432文档资料去哪里找?
开发逆变器进行STM32学习,路径如何规划?
STM32G474如何实现Buck变换器的COT控制模式
关于使用cubemx配置stm32g473re的opamp工作模式:Programmable gain amplifier mode with external filtering
STM32U575 按照历程配置了ADC,参考电压采用默认,Vrefe和VADDA短接,3.3V。ADC引脚有1.8v,读取的结果为0。
现在轮训方式提取结果,连EOC标志都没查,会不会有点盲目?
你最好基于中断方式或DMA方式,每次启动ADC后固定转换完指定个数的通道并提取相应数据,
以保证数据结果的提取和存放顺序。
查询方式的话也可以,同样要保证每次启动后 依次转换完指定通道。
查询式接收处理代码一定要简洁,尤其是配置的转换时间比较短时。
以G431 为例:如果配置了两个通道,单次转换模式,转换次数为2,那么启动一次ADC转换,
将连续完成两次ADC转换过程。
楼主可采用以下两种方法试试:
1.传统方式:每次在通道寄存器只配置一个,转换次数也配置一次,这样完成转换时就是对应通道的结果。
注意,重新配置通道时要清除掉所有通道,也就是保证通道数转换时只有设定的一个。
2.DMA 方式:使用DMA normal模式,通道寄存器配置两个,转换次数也是2.
每次转换DMA搬运两次,得到两个固定顺序的数据,这样楼主可以区分出对应的结果。