TIM1andADC3andDMA
dma HAL tim hal库 adc 

所属分类:单片机开发
开发工具:C/C++
文件大小:14829KB
下载次数:7
上传日期:2020-04-21 15:42:04
上 传 者5943224
说明:  使用HAL库实现TIM1_CC1定时触发ADC3的温度采集通道,并将采集的数据通过DMA传输到SDRAM,从而实现特定频率采样\存储
(The temperature acquisition channel of adc3 is triggered by TIM1 CC1 timing, and the collected data is transferred to SDRAM through DMA, so as to realize sampling and storage at specific frequency)

文件列表:
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\CORE\cmsis_armcc.h (25116, 2018-01-03)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\CORE\cmsis_armclang.h (52439, 2018-01-03)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\CORE\cmsis_compiler.h (5700, 2018-01-03)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\CORE\core_cm7.h (144049, 2018-01-03)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\CORE\startup_stm32h743xx.s (44986, 2018-01-03)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\DSPLIB\arm_cortexM7lfdp_math.lib (13733260, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\DSPLIB\Include\arm_common_tables.h (6156, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\DSPLIB\Include\arm_const_structs.h (3027, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\DSPLIB\Include\arm_math.h (255104, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h (186991, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal.h (37029, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_adc.h (60714, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_adc_ex.h (93559, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_cec.h (33732, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_comp.h (36903, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_conf_template.h (14839, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_cortex.h (19939, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_crc.h (16390, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_crc_ex.h (6103, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_cryp.h (17508, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_cryp_ex.h (4311, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dac.h (19672, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dac_ex.h (12907, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dcmi.h (27505, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_def.h (8588, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dfsdm.h (39244, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma.h (60080, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma2d.h (30585, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma_ex.h (17747, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_eth.h (79367, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_eth_ex.h (14521, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_fdcan.h (133855, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash.h (36047, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash_ex.h (27501, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio.h (13714, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio_ex.h (18333, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_hash.h (24016, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_hash_ex.h (7480, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_hcd.h (10112, 2018-07-04)
4_09__GPIO__USART__RTC__FPU__DSP__SRAM__MALLOC__ADC__DMA _TIM(success)\HALLIB\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_hrtim.h (233583, 2018-07-04)
... ...

一:配置TIM1_CC1 (内部触发) void TIM1_Init(u16 arr,u16 psc) { TIM1_Handler.Instance=TIM1; //定时器1 TIM1_Handler.Init.Prescaler=psc; //分频 TIM1_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //向上计数器 TIM1_Handler.Init.Period=arr; //自动装载值 TIM1_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子 HAL_TIM_Base_Init(&TIM1_Handler); TIM1_sConfig.OCMode = TIM_OCMODE_PWM1; TIM1_sConfig.OCPolarity = TIM_OCPOLARITY_LOW; /* 占空比 50% 占空比 = Pulse / (Period + 1) = 1000 / (2000-1+1)= 50%*/ TIM1_sConfig.Pulse = 1000; HAL_TIM_OC_ConfigChannel(&TIM1_Handler, &TIM1_sConfig, TIM_CHANNEL_1); /* 启动 OC1 */ HAL_TIM_OC_Start(&TIM1_Handler, TIM_CHANNEL_1); } void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) { if(htim->Instance==TIM1) { __HAL_RCC_TIM1_CLK_ENABLE(); //使能TIM1时钟 } } 二:配置ADC3(ADC单次采集,DMA传输,时钟***M--也可使用PLL2) void MY_ADC3_Init(void) { ADC3_Handler.Instance=ADC3; ADC3_Handler.Init.ClockPrescaler=ADC_CLOCK_ASYNC_DIV2; /* 2分频,ADCCLK=PER_CK/2=***/2=32MHZ */ ADC3_Handler.Init.Resolution=ADC_RESOLUTION_16B; //16位模式 ADC3_Handler.Init.ScanConvMode=DISABLE; //非扫描模式 ADC3_Handler.Init.EOCSelection=ADC_EOC_SINGLE_CONV; //关闭EOC中断 ADC3_Handler.Init.LowPowerAutoWait=DISABLE; //自动低功耗关闭 ADC3_Handler.Init.ContinuousConvMode=DISABLE; //禁止连续转换 ADC3_Handler.Init.NbrOfConversion=1; //1个转换在规则序列中 也就是只转换规则序列1 ADC3_Handler.Init.DiscontinuousConvMode=DISABLE; //禁止不连续采样模式 ADC3_Handler.Init.NbrOfDiscConversion=0; //不连续采样通道数为0 ADC3_Handler.Init.ExternalTrigConv=ADC_EXTERNALTRIG_T1_CC1; //使用定时器1触发 ADC3_Handler.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING; /* 上升沿触发 */ ADC3_Handler.Init.BoostMode=ENABLE; //使能BOOT模式 ADC3_Handler.Init.Overrun=ADC_OVR_DATA_OVERWRITTEN; //有新的数据后 直接覆盖掉旧数据 ADC3_Handler.Init.OversamplingMode=DISABLE; //过采样关闭 ADC3_Handler.Init.ConversionDataManagement=ADC_CONVERSIONDATA_DMA_CIRCULAR; //规则通道的数据发往DMA_循环 HAL_ADC_Init(&ADC3_Handler); //初始化 HAL_ADCEx_Calibration_Start(&ADC3_Handler,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED); //ADC校准 } void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) { GPIO_InitTypeDef GPIO_Initure; RCC_PeriphCLKInitTypeDef ADCClkInitStruct; __HAL_RCC_ADC12_CLK_ENABLE(); //使能ADC1/2时钟 __HAL_RCC_ADC3_CLK_ENABLE(); //使能ADC3时钟 __HAL_RCC_GPIOA_CLK_ENABLE(); //开启GPIOA时钟 /*设置ADC为PLL2时钟*/ ADCClkInitStruct.PeriphClockSelection=RCC_PERIPHCLK_ADC; ADCClkInitStruct.PLL2.PLL2M = 25; ADCClkInitStruct.PLL2.PLL2N = 504; ADCClkInitStruct.PLL2.PLL2P = 7; ADCClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_0; ADCClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE; ADCClkInitStruct.PLL2.PLL2FRACN = 0; ADCClkInitStruct.AdcClockSelection=RCC_ADCCLKSOURCE_PLL2; HAL_RCCEx_PeriphCLKConfig(&ADCClkInitStruct); GPIO_Initure.Pin=GPIO_PIN_5; //PA5 GPIO_Initure.Mode=GPIO_MODE_ANALOG; //模拟 GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉 HAL_GPIO_Init(GPIOA,&GPIO_Initure); } 三:配置DMA1_stream1(循环传输,外设到寄存器,目的地址自增) void MYDMA_Config(DMA_Stream_TypeDef *DMA_Streamx) { if((u32)DMA_Streamx>(u32)DMA2) //得到当前stream是属于DMA2还是DMA1 { __HAL_RCC_DMA2_CLK_ENABLE(); //DMA2时钟使能 }else { __HAL_RCC_DMA1_CLK_ENABLE();//DMA1时钟使能 } __HAL_LINKDMA(&ADC3_Handler,DMA_Handle,ADC3xDMA_Handler); //将DMA与USART1联系起来(发送DMA) //Tx DMA配置 ADC3xDMA_Handler.Instance=DMA_Streamx; //数据流选择 ADC3xDMA_Handler.Init.Request=DMA_REQUEST_ADC3; //ADC3发送DMA ADC3xDMA_Handler.Init.Direction=DMA_PERIPH_TO_MEMORY; //外设到存储器 ADC3xDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE; //外设非增量模式 ADC3xDMA_Handler.Init.MemInc=DMA_MINC_ENABLE; //存储器增量模式 ADC3xDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD; //外设数据长度:16位(半字) ADC3xDMA_Handler.Init.MemDataAlignment=DMA_PDATAALIGN_HALFWORD; //存储器数据长度:16位 ADC3xDMA_Handler.Init.Mode=DMA_CIRCULAR; //外设流控模式__循环 ADC3xDMA_Handler.Init.Priority=DMA_PRIORITY_HIGH; //高优先级 ADC3xDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE; ADC3xDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL; ADC3xDMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE; //存储器突发单次传输 ADC3xDMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE; //外设突发单次传输 HAL_DMA_DeInit(&ADC3xDMA_Handler); HAL_DMA_Init(&ADC3xDMA_Handler); } 综合:实现TIM1_CC1定时触发ADC3的温度采集通道,并将采集的数据通过DMA传输到SDRAM,从而实现特定频率采样\存储

近期下载者

相关文件


收藏者