
```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通道会相互影响;所以怎么样才能区分出来是那个通道想要将采集的数传出去`` |
关于STM32G474 双BANK的测试问题
STM32G473 flash擦除时程序卡死
STSPIN32G4内部驱动电压输出问题
comp输出用于tim1刹车,消隐源和pwm输出是不是得是同一个TIM?
STM32G431内部运放1和2输出连接的ADC为什么不是OPAMP?
workbench6.3.2生成的代码,无法用pilot电机参数识别,无法通讯
stm32G474的flash模式如何判定?single bank 和dual bank
STM32G474高精度定时器HRTIM配置死区互补PWM极端输出问题
hrtim里update reset和reset update同时打开不会互相激励吗,另外为什么现在定时器周期值不用-1了
STM32G473 解除写保护失败
现在轮训方式提取结果,连EOC标志都没查,会不会有点盲目?
你最好基于中断方式或DMA方式,每次启动ADC后固定转换完指定个数的通道并提取相应数据,
以保证数据结果的提取和存放顺序。
查询方式的话也可以,同样要保证每次启动后 依次转换完指定通道。
查询式接收处理代码一定要简洁,尤其是配置的转换时间比较短时。
以G431 为例:如果配置了两个通道,单次转换模式,转换次数为2,那么启动一次ADC转换,
将连续完成两次ADC转换过程。
楼主可采用以下两种方法试试:
1.传统方式:每次在通道寄存器只配置一个,转换次数也配置一次,这样完成转换时就是对应通道的结果。
注意,重新配置通道时要清除掉所有通道,也就是保证通道数转换时只有设定的一个。
2.DMA 方式:使用DMA normal模式,通道寄存器配置两个,转换次数也是2.
每次转换DMA搬运两次,得到两个固定顺序的数据,这样楼主可以区分出对应的结果。