|
/ USER CODE BEGIN Header / /**
*/ / USER CODE END Header / / Includes ------------------------------------------------------------------/ include "adc.h"/ USER CODE BEGIN 0 / uint16_t adc_buffer[3]={0}; / USER CODE END 0 / / ADC1 init function / void MX_ADC1_Init(void) { / USER CODE BEGIN ADC1_Init 0 / / USER CODE END ADC1_Init 0 / LL_ADC_InitTypeDef ADC_InitStruct = {0}; LL_ADC_REG_InitTypeDef ADC_REG_InitStruct = {0}; LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; LL_RCC_SetADCClockSource(LL_RCC_ADC_CLKSOURCE_PLL); / Peripheral clock enable / LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC); LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB); /**ADC1 GPIO Configuration PA0 ------> ADC1_IN0 PB2 ------> ADC1_IN10 PA12 [PA10] ------> ADC1_IN16 */ GPIO_InitStruct.Pin = V_VBUS_Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; LL_GPIO_Init(V_VBUS_GPIO_Port, &GPIO_InitStruct); GPIO_InitStruct.Pin = BM_VBEMF_Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; LL_GPIO_Init(BM_VBEMF_GPIO_Port, &GPIO_InitStruct); GPIO_InitStruct.Pin = BM_CURR_Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; LL_GPIO_Init(BM_CURR_GPIO_Port, &GPIO_InitStruct); / ADC1 DMA Init / / ADC1 Init / LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_ADC1); LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_PERIPH_TO_MEMORY); LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_LOW); LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_CIRCULAR); LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT); LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT); LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_HALFWORD); LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_HALFWORD); / USER CODE BEGIN ADC1_Init 1 / / USER CODE END ADC1_Init 1 / /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */ define ADC_CHANNEL_CONF_RDY_TIMEOUT_MS ( 1U)if (USE_TIMEOUT == 1)uint32_t Timeout ; / Variable used for Timeout management / endif / USE_TIMEOUT /ADC_InitStruct.Resolution = LL_ADC_RESOLUTION_12B; ADC_InitStruct.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT; ADC_InitStruct.LowPowerMode = LL_ADC_LP_MODE_NONE; LL_ADC_Init(ADC1, &ADC_InitStruct); LL_ADC_REG_SetSequencerConfigurable(ADC1, LL_ADC_REG_SEQ_FIXED); ADC_REG_InitStruct.TriggerSource = LL_ADC_REG_TRIG_SOFTWARE; ADC_REG_InitStruct.SequencerLength = LL_ADC_REG_SEQ_SCAN_DISABLE; ADC_REG_InitStruct.ContinuousMode = LL_ADC_REG_CONV_CONTINUOUS; ADC_REG_InitStruct.DMATransfer = LL_ADC_REG_DMA_TRANSFER_UNLIMITED; ADC_REG_InitStruct.Overrun = LL_ADC_REG_OVR_DATA_OVERWRITTEN; LL_ADC_REG_Init(ADC1, &ADC_REG_InitStruct); LL_ADC_SetCommonClock(__LL_ADC_COMMON_INSTANCE(ADC1), LL_ADC_CLOCK_ASYNC_DIV8); LL_ADC_REG_SetSequencerScanDirection(ADC1, LL_ADC_REG_SEQ_SCAN_DIR_FORWARD); LL_ADC_SetOverSamplingScope(ADC1, LL_ADC_OVS_DISABLE); LL_ADC_SetTriggerFrequencyMode(ADC1, LL_ADC_CLOCK_FREQ_MODE_HIGH); LL_ADC_REG_SetSequencerChAdd(ADC1, LL_ADC_CHANNEL_0 |LL_ADC_CHANNEL_10 |LL_ADC_CHANNEL_16); / Poll for ADC channel configuration ready / if (USE_TIMEOUT == 1)Timeout = ADC_CHANNEL_CONF_RDY_TIMEOUT_MS; endif / USE_TIMEOUT /while (LL_ADC_IsActiveFlag_CCRDY(ADC1) == 0) { if (USE_TIMEOUT == 1)/ Check Systick counter flag to decrement the time-out value / if (LL_SYSTICK_IsActiveCounterFlag()) { if(Timeout-- == 0)
Error_Handler();
} endif / USE_TIMEOUT /} / Clear flag ADC channel configuration ready / LL_ADC_ClearFlag_CCRDY(ADC1); LL_ADC_SetSamplingTimeCommonChannels(ADC1, LL_ADC_SAMPLINGTIME_COMMON_1, LL_ADC_SAMPLINGTIME_79CYCLES_5); LL_ADC_DisableIT_EOC(ADC1); LL_ADC_DisableIT_EOS(ADC1); / Enable ADC internal voltage regulator / LL_ADC_EnableInternalRegulator(ADC1); / Delay for ADC internal voltage regulator stabilization. / / Compute number of CPU cycles to wait for, from delay in us. / / Note: Variable divided by 2 to compensate partially / / CPU processing cycles (depends on compilation optimization). / / Note: If system core clock frequency is below 200kHz, wait time / / is only a few CPU processing cycles. / __IO uint32_t wait_loop_index; wait_loop_index = ((LL_ADC_DELAY_INTERNAL_REGUL_STAB_US (SystemCoreClock / (100000 2))) / 10); while(wait_loop_index != 0) { wait_loop_index--; } / USER CODE BEGIN ADC1_Init 2 / // 1. 校准 LL_ADC_StartCalibration(ADC1); while (LL_ADC_IsCalibrationOnGoing(ADC1)); LL_ADC_Enable(ADC1); // 5. 启动转换 LL_ADC_REG_StartConversion(ADC1); // 2. 使能ADC // while (LL_ADC_IsActiveFlag_ADRDY(ADC1) == 0); LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED); LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1); / USER CODE END ADC1_Init 2 / } / USER CODE BEGIN 1 / / USER CODE END 1 / /这是我ADC_DMA配置及开启问题,请教大拿们帮忙指正原因在哪/ |
STM32G030x6/x8被淋雨进水了但未通电,风险如何?怎么处理?
20GQCDR 请问这个是用在哪里的,各位大神帮忙看看,什么类型的,丝印是1242688
关于手动移植RTOS的问题,在基于HAL生成的工程上。xPortSysTickHandler()会影响外部晶振的时钟初始化,进入硬件故障处理函数,HSI没问题
使用单片机的USB PD功能时,初始化一直出错。
问询:哪里有STEVAL-L99615C的固件包下,主要是求L9961的源码,我用来抄I2C,大三小白刚刚接触MCU,求大佬指路
stm32g070rbt6 ADC1 多通道循环自动采样DMA传输到ram,采样时间要设置得很长采样值才能相对准确
ST-LINK Utility不能识别STM32G0的芯片,不能下载程序
STM32G030J6M6如何禁用NRST将其复用为ADC
年终77折活动,有哪些想兑换的?
stm32G030C8T6 官方例程库
微信公众号
手机版