完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在 Nucleo-h745ziq 板上工作。我启用了 ADC ch3 和 12 位分辨率,启用了 DMA 和循环模式。我将 3v 电源连接到 ADC 通道。但是当我重置板时我没有得到更新值我得到更新值,当我禁用缓存时我得到更新值。下面是我完成的设置。你能帮我解决这个问题吗?
uint8_t 标志; __attribute__((section(".buffer"),used)) uint32_t ADCbUFF[1]; void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) { 标志=1; } MX_GPIO_Init(); MX_USART3_UART_Init(); MX_DMA_Init(); MX_ADC1_Init(); MX_SPI1_Init(); /* 用户代码开始 2 */ HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED); HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADCbUFF, 1); /* 用户代码结束 2 */ /* 无限循环 */ /* 用户代码开始时 */ 而 (1) { /* 用户代码结束 */ /* 用户代码开始 3 */ 如果(标志==1) { printf("ADC值=%ldnr",ADCbUFF[0]); 标志=0; HAL_延迟(2000); } } 静态无效 MX_ADC1_Init(无效) { /* 用户代码开始 ADC1_Init 0 */ /* 用户代码结束 ADC1_Init 0 */ ADC_MultiModeTypeDef 多模 = {0}; /* 用户代码开始 ADC1_Init 1 */ /* 用户代码结束 ADC1_Init 1 */ /** 通用配置 */ hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2; hadc1.Init.Resolution = ADC_RESOLUTION_16B; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc1.Init.LowPowerAutoWait = 禁用; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DiscontinuousConvMode = 禁用; hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_CIRCULAR; hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE; hadc1.Init.OversamplingMode = ENABLE; 如果(HAL_ADC_Init(&hadc1)!= HAL_OK) { 错误处理程序(); } /** 配置ADC多模式 */ multimode.Mode = ADC_MODE_INDEPENDENT; 如果 (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK) { 错误处理程序(); } /* 用户代码开始 ADC1_Init 2 */ /* 用户代码结束 ADC1_Init 2 */ } void SystemClock_Config(无效) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** 提供配置更新使能 */ HAL_PWREx_ConfigSupply(PWR_DIRECT_SMPS_SUPPLY); /** 配置主内部稳压器输出电压 */ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0); 同时(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)){} /** 配置PLL时钟源的宏 */ __HAL_RCC_PLL_PLLSOURCE_CONFIG(RCC_PLLSOURCE_HSE); /** 根据指定的参数初始化 RCC 振荡器 * 在 RCC_OscInitTypeDef 结构中。 */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 1; RCC_OscInitStruct.PLL.PLLN = 120; RCC_OscInitStruct.PLL.PLLP = 2; RCC_OscInitStruct.PLL.PLLQ = 32; RCC_OscInitStruct.PLL.PLLR = 2; RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_3; RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE; RCC_OscInitStruct.PLL.PLLFRACN = 0; 如果 (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { 错误处理程序(); } /** 初始化 CPU、AHB 和 APB 总线时钟 */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2 |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2; 如果 (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) { 错误处理程序(); } } void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) { GPIO_InitTypeDef GPIO_InitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; 如果(hadc->实例==ADC1) { /* 用户代码开始 ADC1_MspInit 0 */ /* 用户代码结束 ADC1_MspInit 0 */ /** 初始化外设时钟 */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC; PeriphClkInitStruct.PLL2.PLL2M = 2; PeriphClkInitStruct.PLL2.PLL2N = 129; PeriphClkInitStruct.PLL2.PLL2P = 18; PeriphClkInitStruct.PLL2.PLL2Q = 2; PeriphClkInitStruct.PLL2.PLL2R = 2; PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_2; PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE; PeriphClkInitStruct.PLL2.PLL2FRACN = 0; PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2; 如果(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct)!= HAL_OK) { 错误处理程序(); } /* 外设时钟使能 */ __HAL_RCC_ADC12_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /**ADC1 GPIO 配置 PA6 ------> ADC1_INP3 */ GPIO_InitStruct.Pin = GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* ADC1 DMA 初始化 */ /* ADC1 初始化 */ hdma_adc1.Instance = DMA1_Stream0; hdma_adc1.Init.Request = DMA_REQUEST_ADC1; hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_adc1.Init.Mode = DMA_CIRCULAR; hdma_adc1.Init.Priority = DMA_PRIORITY_LOW; hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; 如果(HAL_DMA_Init(&hdma_adc1)!= HAL_OK) { 错误处理程序(); } __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1); /* ADC1 中断初始化 */ HAL_NVIC_SetPriority(ADC_IRQn, 0, 0); HAL_NVIC_EnableIRQ(ADC_IRQn); /* 用户代码开始 ADC1_MspInit 1 */ /* 用户代码结束 ADC1_MspInit 1 */ } } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2573 浏览 1 评论
3192 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1761 浏览 1 评论
3587 浏览 6 评论
5963 浏览 21 评论
922浏览 4评论
1296浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
561浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1284浏览 3评论
1336浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-4 14:29 , Processed in 1.055750 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号