|
```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通道会相互影响;所以怎么样才能区分出来是那个通道想要将采集的数传出去`` |
MCU的ADC进行电压采集时,外部输入阻抗最大能到多少?
stm32g474cct6 flash地址问题
在 main 函数里读取 ADC 采样数值
HRTIM中已经设置了两路独立输出,第二路无法设置触发源,提示必须是0
记录使用Cube生成HRTIM工程时的一个bug
STM32L010F4P6的ADC多通道采集,采用扫描+DMA的方式,采集到不同通道的值会一起变化
stm32 usb hid设备能发数据给PC,但不能接收PC的数据!!!
STSPIN32G4 STM32G431VBTx CAN FIFO发送数据帧随机变远程帧
如何将电机转速度控制在0.1RPM以下?我尝试过将SPEED_UNIT改为480,电机转速度可以控制在0.125RPM,但最转到250RPM时,编码器计数好像溢出了
STM32G474 HRTIM的single-shot功能,如何使用?
微信公众号
手机版
现在轮训方式提取结果,连EOC标志都没查,会不会有点盲目?
你最好基于中断方式或DMA方式,每次启动ADC后固定转换完指定个数的通道并提取相应数据,
以保证数据结果的提取和存放顺序。
查询方式的话也可以,同样要保证每次启动后 依次转换完指定通道。
查询式接收处理代码一定要简洁,尤其是配置的转换时间比较短时。
以G431 为例:如果配置了两个通道,单次转换模式,转换次数为2,那么启动一次ADC转换,
将连续完成两次ADC转换过程。
楼主可采用以下两种方法试试:
1.传统方式:每次在通道寄存器只配置一个,转换次数也配置一次,这样完成转换时就是对应通道的结果。
注意,重新配置通道时要清除掉所有通道,也就是保证通道数转换时只有设定的一个。
2.DMA 方式:使用DMA normal模式,通道寄存器配置两个,转换次数也是2.
每次转换DMA搬运两次,得到两个固定顺序的数据,这样楼主可以区分出对应的结果。