```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通道会相互影响;所以怎么样才能区分出来是那个通道想要将采集的数传出去`` |
foc电流环无法正确维持Iq在自己设定的数值。
STM32G431 用MCSDK5.4.8 进行PMSM永磁同步电机FOC控制,转速上升到某一值(3500rpm)无法继续上升,上不去
STM32G431KBU3 只要开中断HAL_xxxx_Start_IT()就死机一动不动
STM32G474HRTIM中断跳到硬件错误中断问题
F302R8电机驱动三角函数为什么用定点查表方式
STM32F405使用LL库建立SPI通讯报溢出是什么原因?
免费试用|领取你的STM32G491,完成你的开发计划
stm32G431 用DWT外设用来计时,DWT->CYCCNT的值一直固定不变,程序里面都使能了。还有别的寄存器要打开吗?
cubemx安装HAL库时要账号登录,点击注册,显示错误,ST官网点击注册也是显示错误,请问是什么问题?
基于GCC编译器的initcall在STM32如何实现?
现在轮训方式提取结果,连EOC标志都没查,会不会有点盲目?
你最好基于中断方式或DMA方式,每次启动ADC后固定转换完指定个数的通道并提取相应数据,
以保证数据结果的提取和存放顺序。
查询方式的话也可以,同样要保证每次启动后 依次转换完指定通道。
查询式接收处理代码一定要简洁,尤其是配置的转换时间比较短时。
以G431 为例:如果配置了两个通道,单次转换模式,转换次数为2,那么启动一次ADC转换,
将连续完成两次ADC转换过程。
楼主可采用以下两种方法试试:
1.传统方式:每次在通道寄存器只配置一个,转换次数也配置一次,这样完成转换时就是对应通道的结果。
注意,重新配置通道时要清除掉所有通道,也就是保证通道数转换时只有设定的一个。
2.DMA 方式:使用DMA normal模式,通道寄存器配置两个,转换次数也是2.
每次转换DMA搬运两次,得到两个固定顺序的数据,这样楼主可以区分出对应的结果。