新手上路
- 积分
- 35
- 金钱
- 35
- 注册时间
- 2019-4-7
- 在线时间
- 5 小时
|
10金钱
各位好:
STM32H743; HAL库; ADC; DMA;
我在使用ADC时,采用DMA的方式,但是通过单步调试,HAL_ADC_Start_DMA()函数的目标地址里一直没有值。ADC/DMA设置如下: 整个工程在附件;
期待各位的回答;
谢谢!
[mw_shl_code=applescript,true]ADC1_Handler.Instance = ADC1;
ADC1_Handler.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; //4·ÖÆμ£¬ADCCLK=PER_CK/4=64/4=16MHZ
ADC1_Handler.Init.Resolution = ADC_RESOLUTION_12B; //16λÄ£ê½
ADC1_Handler.Init.ScanConvMode = ENABLE; //·Çé¨ÃèÄ£ê½
ADC1_Handler.Init.EOCSelection = ADC_EOC_SINGLE_CONV; //1رÕEOCÖD¶Ï
ADC1_Handler.Init.LowPowerAutoWait = DISABLE; //×Ô¶ˉμí1|oÄ1رÕ
ADC1_Handler.Init.ContinuousConvMode= ENABLE; //1رÕá¬Dø×a»»
ADC1_Handler.Init.NbrOfConversion = 1; //1¸ö×a»»Ôú1æÔòDòáDÖD ò2¾íêÇÖ»×a»»1æÔòDòáD1
ADC1_Handler.Init.DiscontinuousConvMode = DISABLE; //½ûÖ12»á¬Dø2éÑùÄ£ê½
ADC1_Handler.Init.NbrOfDiscConversion = 0; //2»á¬Dø2éÑùí¨μàêyÎa0
ADC1_Handler.Init.ExternalTrigConv = ADC_SOFTWARE_START; //èí¼t′¥·¢
ADC1_Handler.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;//ê1óÃèí¼t′¥·¢
ADC1_Handler.Init.BoostMode = ENABLE; //BOOTÄ£ê½1رÕ
ADC1_Handler.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; //óDDÂμÄêy¾YμÄËàoóÖ±½ó¸2¸Çμô¾éêy¾Y
ADC1_Handler.Init.OversamplingMode = DISABLE; //1y2éÑù1رÕ
ADC1_Handler.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR; //1æÔòí¨μàμÄêy¾Y½ö½ö±£′æÔúDR¼Ä′æÆ÷àïÃæ
HAL_ADC_Init(&ADC1_Handler); //3õê¼»ˉ
HAL_ADCEx_Calibration_Start(&ADC1_Handler,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED); //ADCD£×¼
ADC1_ChanConf.Channel = ADC_CHANNEL_19; //í¨μà
ADC1_ChanConf.Rank = ADC_REGULAR_RANK_1; //1¸öDòáD
ADC1_ChanConf.SamplingTime = ADC_SAMPLETIME_64CYCLES_5; //2éÑùê±¼ä
ADC1_ChanConf.SingleDiff = ADC_SINGLE_ENDED; //μ¥±ß2é¼ˉ
ADC1_ChanConf.OffsetNumber = ADC_OFFSET_NONE;
ADC1_ChanConf.Offset = 0;
HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf); //í¨μàÅäÖÃ[/mw_shl_code][mw_shl_code=applescript,true]UART1TxDMA_Handler.Instance = DMA_Streamx; //êy¾Yá÷Ñ¡Ôñ
UART1TxDMA_Handler.Init.Request = DMA_REQUEST_ADC1; //USART1·¢ËíDMA
UART1TxDMA_Handler.Init.Direction = DMA_PERIPH_TO_MEMORY; //′æ′¢Æ÷μ½íaéè
UART1TxDMA_Handler.Init.PeriphInc = DMA_PINC_DISABLE; //íaéè·ÇÔöá¿Ä£ê½
UART1TxDMA_Handler.Init.MemInc = DMA_MINC_ENABLE; //′æ′¢Æ÷Ôöá¿Ä£ê½
UART1TxDMA_Handler.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; //íaéèêy¾Y3¤¶è:8λ
UART1TxDMA_Handler.Init.MemDataAlignment = DMA_PDATAALIGN_HALFWORD; //′æ′¢Æ÷êy¾Y3¤¶è:8λ
UART1TxDMA_Handler.Init.Mode = DMA_CIRCULAR; //íaéèá÷¿ØÄ£ê½
UART1TxDMA_Handler.Init.Priority = DMA_PRIORITY_HIGH; //ÖDμèóÅÏè¼¶
UART1TxDMA_Handler.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
UART1TxDMA_Handler.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
UART1TxDMA_Handler.Init.MemBurst = DMA_MBURST_SINGLE; //′æ′¢Æ÷í»·¢μ¥′Î′«êä
UART1TxDMA_Handler.Init.PeriphBurst = DMA_PBURST_SINGLE; //íaéèí»·¢μ¥′Î′«êä
HAL_DMA_DeInit(&UART1TxDMA_Handler);
HAL_DMA_Init(&UART1TxDMA_Handler);
__HAL_LINKDMA(&ADC1_Handler,DMA_Handle,UART1TxDMA_Handler); //½«DMAóëUSART1áaÏμÆeà′(·¢ËíDMA)[/mw_shl_code]
|
最佳答案
查看完整内容[请看2#楼]
找到原因了: 目标缓存地址 没有对其,使用语句:
ALIGN_32BYTES (volatile uint16_t ADC_Cov[ADC_CONVERTED_DATA_BUFFER_SIZE]);
|