当前位置: 首页 > news >正文

免费注册微信网站怎样做天猫网站视频

免费注册微信网站,怎样做天猫网站视频,网站建设师薪资,做网站 过程AD转换包括采样阶段和转换阶段。在采样阶段才对通道数据进行#xff1b;在转换阶段只是将采集的数据进行转换为数字量输出#xff0c;此刻通道数据变化不会改变转换结果。 实验1#xff1a;单ADC单通道中断 硬件原理图 由于PC1接到电位器上#xff0c;所以我们实验选择PC1… AD转换包括采样阶段和转换阶段。在采样阶段才对通道数据进行在转换阶段只是将采集的数据进行转换为数字量输出此刻通道数据变化不会改变转换结果。 实验1单ADC单通道中断 硬件原理图 由于PC1接到电位器上所以我们实验选择PC1引脚作为ADC接口查询STM32数据手册得知PC1可作为ADC1的IN11ADC1_IN11。 USART配置 115200-8-N-1重定向支持printf打印勾选C库。 ADC1配置 ADC_HandleTypeDef hadc1;void MX_ADC1_Init(void) {ADC_ChannelConfTypeDef sConfig {0};/* Common config */hadc1.Instance ADC1;hadc1.Init.ScanConvMode ADC_SCAN_DISABLE;hadc1.Init.ContinuousConvMode ENABLE;hadc1.Init.DiscontinuousConvMode DISABLE;hadc1.Init.ExternalTrigConv ADC_SOFTWARE_START;hadc1.Init.DataAlign ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion 1;if (HAL_ADC_Init(hadc1) ! HAL_OK){Error_Handler();}/* Configure Regular Channel */sConfig.Channel ADC_CHANNEL_11;sConfig.Rank ADC_REGULAR_RANK_1;sConfig.SamplingTime ADC_SAMPLETIME_1CYCLE_5;if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK){Error_Handler();}HAL_ADC_Start_IT(hadc1); }void HAL_ADC_MspInit(ADC_HandleTypeDef *adcHandle) {GPIO_InitTypeDef GPIO_InitStruct {0};if (adcHandle-Instance ADC1){__HAL_RCC_ADC1_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();/**ADC1 GPIO ConfigurationPC1 ------ ADC1_IN11*/GPIO_InitStruct.Pin GPIO_PIN_1;GPIO_InitStruct.Mode GPIO_MODE_ANALOG;HAL_GPIO_Init(GPIOC, GPIO_InitStruct);/* ADC1 interrupt Init */HAL_NVIC_SetPriority(ADC1_2_IRQn, 0, 0);HAL_NVIC_EnableIRQ(ADC1_2_IRQn);} }void HAL_ADC_MspDeInit(ADC_HandleTypeDef *adcHandle) {if (adcHandle-Instance ADC1){__HAL_RCC_ADC1_CLK_DISABLE();/**ADC1 GPIO ConfigurationPC1 ------ ADC1_IN11*/HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1);/* ADC1 interrupt Deinit */HAL_NVIC_DisableIRQ(ADC1_2_IRQn);} } /*** brief System Clock Configuration* retval None*/ void SystemClock_Config(void) {RCC_PeriphCLKInitTypeDef PeriphClkInit {0};...PeriphClkInit.PeriphClockSelection RCC_PERIPHCLK_ADC;PeriphClkInit.AdcClockSelection RCC_ADCPCLK2_DIV6;if (HAL_RCCEx_PeriphCLKConfig(PeriphClkInit) ! HAL_OK){Error_Handler();} } 初始化结构体的参数 ScanConvMode扫描转换模式 指定转换是扫描模式多通道模式还是单个转换单通道模式。ADC_SCAN_DISABLE 或 ADC_SCAN_ENABLE。 在扫描模式下扫描一组选定的通道它们将会被依次转换由序列寄存器ADC_SQRx或ADC_JSQRx选中的通道被转换。如果分别设置了EOCIE位或JEOCIE位只在最后一个通道转换完后才会产生EOC或JEOC中断。 ContinuousConvMode连续转换模式 ADC转换可以在一次转换后停止然后再次触发后进行下一次转换一般配置 也可以是持续不断地进行转换。 通过ADC_CR2CONT位决定。 ExternalTrigConv外部触发方式 根据项目需求配置触发源。实际上一般使用软件自动触发。 测试环节 __IO uint32_t ADC_ConvertedValue; float ADC_Vol; /*** brief 转换完成中断回调函数非阻塞模式* param AdcHandle : ADC句柄* retval 无*/ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *AdcHandle) {ADC_ConvertedValue HAL_ADC_GetValue(AdcHandle); }void test(void) {while (1){HAL_Delay(1000);ADC_Vol (float) ADC_ConvertedValue*(3.3/4096); // 读取转换的AD值printf(\r\n The current AD value %f V \r\n, ADC_Vol); } } 实验现象 旋钮电位器电压输入有变化。将PC1接到VCC输出3.3V。 实验2单ADC单通道DMA 硬件原理图和USART配置 看实验1 ADC1配置 ADC_HandleTypeDef hadc1; DMA_HandleTypeDef hdma_adc1;__IO uint32_t ADC_ConvertedValue;void MX_ADC1_Init(void) {ADC_ChannelConfTypeDef sConfig {0};/** Common config*/hadc1.Instance ADC1;hadc1.Init.ScanConvMode ADC_SCAN_DISABLE;hadc1.Init.ContinuousConvMode ENABLE;hadc1.Init.DiscontinuousConvMode DISABLE;hadc1.Init.ExternalTrigConv ADC_SOFTWARE_START;hadc1.Init.DataAlign ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion 1;if (HAL_ADC_Init(hadc1) ! HAL_OK){Error_Handler();}/** Configure Regular Channel*/sConfig.Channel ADC_CHANNEL_11;sConfig.Rank ADC_REGULAR_RANK_1;sConfig.SamplingTime ADC_SAMPLETIME_1CYCLE_5;if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK){Error_Handler();}HAL_ADC_Start_DMA(hadc1, (uint32_t *)ADC_ConvertedValue, 1); }void HAL_ADC_MspInit(ADC_HandleTypeDef *adcHandle) {GPIO_InitTypeDef GPIO_InitStruct {0};if (adcHandle-Instance ADC1){__HAL_RCC_ADC1_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();/**ADC1 GPIO ConfigurationPC1 ------ ADC1_IN11*/GPIO_InitStruct.Pin GPIO_PIN_1;GPIO_InitStruct.Mode GPIO_MODE_ANALOG;HAL_GPIO_Init(GPIOC, GPIO_InitStruct);/* ADC1 DMA Init *//* ADC1 Init */hdma_adc1.Instance DMA1_Channel1;hdma_adc1.Init.Direction DMA_PERIPH_TO_MEMORY;hdma_adc1.Init.PeriphInc DMA_PINC_DISABLE;hdma_adc1.Init.MemInc DMA_MINC_DISABLE;hdma_adc1.Init.PeriphDataAlignment DMA_PDATAALIGN_HALFWORD;hdma_adc1.Init.MemDataAlignment DMA_MDATAALIGN_HALFWORD;hdma_adc1.Init.Mode DMA_CIRCULAR;hdma_adc1.Init.Priority DMA_PRIORITY_MEDIUM;if (HAL_DMA_Init(hdma_adc1) ! HAL_OK){Error_Handler();}__HAL_LINKDMA(adcHandle, DMA_Handle, hdma_adc1);} }void HAL_ADC_MspDeInit(ADC_HandleTypeDef *adcHandle) {if (adcHandle-Instance ADC1){__HAL_RCC_ADC1_CLK_DISABLE();/**ADC1 GPIO ConfigurationPC1 ------ ADC1_IN11*/HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1);/* ADC1 DMA DeInit */HAL_DMA_DeInit(adcHandle-DMA_Handle);} } /*** brief System Clock Configuration* retval None*/ void SystemClock_Config(void) {RCC_PeriphCLKInitTypeDef PeriphClkInit {0};...PeriphClkInit.PeriphClockSelection RCC_PERIPHCLK_ADC;PeriphClkInit.AdcClockSelection RCC_ADCPCLK2_DIV6;if (HAL_RCCEx_PeriphCLKConfig(PeriphClkInit) ! HAL_OK){Error_Handler();} } 测试环节 extern __IO uint32_t ADC_ConvertedValue; float ADC_Vol; void test(void) {while (1){HAL_Delay(1000);ADC_Vol (float) ADC_ConvertedValue*(3.3/4096); // 读取转换的AD值printf(\r\n The current AD value %f V \r\n, ADC_Vol); } } 实验现象 旋钮电位器电压输入有变化。将PC1接到VCC输出3.3V。 实验3单ADC多通道DMA 硬件原理图和USART配置 对硬件原理图的PC0、PC1、PC2、PC3、PC4、PC5进行ADC配置具体看实验1。 ADC1配置 ____IO uint16_t ADC_ConvertedValue[6] {0};ADC_HandleTypeDef hadc1; DMA_HandleTypeDef hdma_adc1;void MX_ADC1_Init(void) {ADC_ChannelConfTypeDef sConfig {0};/** Common config*/hadc1.Instance ADC1;hadc1.Init.ScanConvMode ADC_SCAN_ENABLE;hadc1.Init.ContinuousConvMode ENABLE;hadc1.Init.DiscontinuousConvMode DISABLE;hadc1.Init.ExternalTrigConv ADC_SOFTWARE_START;hadc1.Init.DataAlign ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion 6;if (HAL_ADC_Init(hadc1) ! HAL_OK){Error_Handler();}/** Configure Regular Channel*/sConfig.Channel ADC_CHANNEL_10;sConfig.Rank ADC_REGULAR_RANK_1;sConfig.SamplingTime ADC_SAMPLETIME_1CYCLE_5;if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK){Error_Handler();}sConfig.Channel ADC_CHANNEL_11;sConfig.Rank ADC_REGULAR_RANK_2;if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK){Error_Handler();}sConfig.Channel ADC_CHANNEL_12;sConfig.Rank ADC_REGULAR_RANK_3;if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK){Error_Handler();}sConfig.Channel ADC_CHANNEL_13;sConfig.Rank ADC_REGULAR_RANK_4;if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK){Error_Handler();}sConfig.Channel ADC_CHANNEL_14;sConfig.Rank ADC_REGULAR_RANK_5;if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK){Error_Handler();}sConfig.Channel ADC_CHANNEL_15;sConfig.Rank ADC_REGULAR_RANK_6;if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK){Error_Handler();}HAL_ADC_Start_DMA(hadc1, (uint32_t *)ADC_ConvertedValue, 6); }void HAL_ADC_MspInit(ADC_HandleTypeDef *adcHandle) {GPIO_InitTypeDef GPIO_InitStruct {0};if (adcHandle-Instance ADC1){__HAL_RCC_ADC1_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();/**ADC1 GPIO ConfigurationPC0 ------ ADC1_IN10PC1 ------ ADC1_IN11PC2 ------ ADC1_IN12PC3 ------ ADC1_IN13PC4 ------ ADC1_IN14PC5 ------ ADC1_IN15*/GPIO_InitStruct.Pin GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5;GPIO_InitStruct.Mode GPIO_MODE_ANALOG;HAL_GPIO_Init(GPIOC, GPIO_InitStruct);/* ADC1 DMA Init *//* ADC1 Init */hdma_adc1.Instance DMA1_Channel1;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_HALFWORD;hdma_adc1.Init.MemDataAlignment DMA_MDATAALIGN_HALFWORD;hdma_adc1.Init.Mode DMA_CIRCULAR;hdma_adc1.Init.Priority DMA_PRIORITY_MEDIUM;if (HAL_DMA_Init(hdma_adc1) ! HAL_OK){Error_Handler();}__HAL_LINKDMA(adcHandle, DMA_Handle, hdma_adc1);} }void HAL_ADC_MspDeInit(ADC_HandleTypeDef *adcHandle) {if (adcHandle-Instance ADC1){__HAL_RCC_ADC1_CLK_DISABLE();/**ADC1 GPIO ConfigurationPC0 ------ ADC1_IN10PC1 ------ ADC1_IN11PC2 ------ ADC1_IN12PC3 ------ ADC1_IN13PC4 ------ ADC1_IN14PC5 ------ ADC1_IN15*/HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5);/* ADC1 DMA DeInit */HAL_DMA_DeInit(adcHandle-DMA_Handle);} } /*** brief System Clock Configuration* retval None*/ void SystemClock_Config(void) {RCC_PeriphCLKInitTypeDef PeriphClkInit {0};...PeriphClkInit.PeriphClockSelection RCC_PERIPHCLK_ADC;PeriphClkInit.AdcClockSelection RCC_ADCPCLK2_DIV6;if (HAL_RCCEx_PeriphCLKConfig(PeriphClkInit) ! HAL_OK){Error_Handler();} } 测试环节 extern __IO uint16_t ADC_ConvertedValue[6]; float ADC_Vol[6];void test(void) {while(1){HAL_Delay(1000);ADC_Vol[0] (float) ADC_ConvertedValue[0]/4096*(float)3.3; // 读取转换的AD值ADC_Vol[1] (float) ADC_ConvertedValue[1]/4096*(float)3.3; // 读取转换的AD值ADC_Vol[2] (float) ADC_ConvertedValue[2]/4096*(float)3.3; // 读取转换的AD值ADC_Vol[3] (float) ADC_ConvertedValue[3]/4096*(float)3.3; // 读取转换的AD值ADC_Vol[4] (float) ADC_ConvertedValue[4]/4096*(float)3.3; // 读取转换的AD值ADC_Vol[5] (float) ADC_ConvertedValue[5]/4096*(float)3.3; // 读取转换的AD值printf(ADC_CHANNEL10 value %f V \r\n, ADC_Vol[0]);printf(ADC_CHANNEL11 value %f V \r\n, ADC_Vol[1]);printf(ADC_CHANNEL12 value %f V \r\n, ADC_Vol[2]);printf(ADC_CHANNEL13 value %f V \r\n, ADC_Vol[3]);printf(ADC_CHANNEL14 value %f V \r\n, ADC_Vol[4]);printf(ADC_CHANNEL15 value %f V \r\n, ADC_Vol[5]);} } 实验现象 输出引脚悬空状态依次将各引脚接到VCC依次输出3.3V。 实验4双ADC单通道慢速交叉采集 硬件原理图和USART配置 看实验1 快速交叉模式 该模式下只能在规则通道组通常一个通道上启动。外部触发源来自于ADC1的规则通道复用器。外部触发后 ADC2立即启动。 ADC1延时7个ADC_CLK时钟周期后启动。 在ADC1如果通过EOCIE位使能产生EOC中断后生成一个32位DMA传输请求如果设置了DMA位该请求将 ADC1_DR 寄存器传输到SRAMADC2转换的数据在高16位ADC1转换的数据在低16位。 允许的最大采样周期  7个ADC_CLK时钟周期以避免在ADC1和ADC2转换相同通道的情况下采样相位转换重叠。 如果在ADC1和ADC2上都设置了CONT位则两个ADC所选的规则通道将连续转换。 慢速交叉模式 该模式下只能在规则通道组只有一个通道上启动。外部触发源来自于ADC1的规则通道复用器。外部触发后 ADC2立即启动。 ADC1延时14个ADC_CLK时钟周期后启动。 ADC2在第二次延时14个ADC_CLK时钟周期后启动。依次类推交叉采集。 在ADC1如果通过EOCIE位使能产生EOC中断后生成一个32位DMA传输请求如果设置了DMA位该请求将 ADC1_DR 寄存器传输到SRAMADC2转换的数据在高16位ADC1转换的数据在低16位。 允许的最大采样周期  14个ADC_CLK时钟周期以避免与下一次转换重叠。 CONT位不能在模式中设置因为它不断地转换所选的规则通道。 应用程序必须确保在启用交叉模式时不会发生注入通道的外部触发器。 ADC配置 ADC_HandleTypeDef hadc1; ADC_HandleTypeDef hadc2; DMA_HandleTypeDef hdma_adc1;void MX_ADC1_Init(void) {ADC_MultiModeTypeDef multimode {0};ADC_ChannelConfTypeDef sConfig {0};/** Common config*/hadc1.Instance ADC1;hadc1.Init.ScanConvMode ADC_SCAN_DISABLE;hadc1.Init.ContinuousConvMode ENABLE;hadc1.Init.DiscontinuousConvMode DISABLE;hadc1.Init.ExternalTrigConv ADC_SOFTWARE_START;hadc1.Init.DataAlign ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion 1;if (HAL_ADC_Init(hadc1) ! HAL_OK){Error_Handler();}/** Configure the ADC multi-mode*/multimode.Mode ADC_DUALMODE_INTERLSLOW;if (HAL_ADCEx_MultiModeConfigChannel(hadc1, multimode) ! HAL_OK){Error_Handler();}/** Configure Regular Channel*/sConfig.Channel ADC_CHANNEL_11;sConfig.Rank ADC_REGULAR_RANK_1;sConfig.SamplingTime ADC_SAMPLETIME_1CYCLE_5;if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK){Error_Handler();} }void MX_ADC2_Init(void) {ADC_ChannelConfTypeDef sConfig {0};/** Common config*/hadc2.Instance ADC2;hadc2.Init.ScanConvMode ADC_SCAN_DISABLE;hadc2.Init.ContinuousConvMode ENABLE;hadc2.Init.DiscontinuousConvMode DISABLE;hadc2.Init.ExternalTrigConv ADC_SOFTWARE_START;hadc2.Init.DataAlign ADC_DATAALIGN_RIGHT;hadc2.Init.NbrOfConversion 1;if (HAL_ADC_Init(hadc2) ! HAL_OK){Error_Handler();}/** Configure Regular Channel*/sConfig.Channel ADC_CHANNEL_11;sConfig.Rank ADC_REGULAR_RANK_1;sConfig.SamplingTime ADC_SAMPLETIME_1CYCLE_5;if (HAL_ADC_ConfigChannel(hadc2, sConfig) ! HAL_OK){Error_Handler();} }void HAL_ADC_MspInit(ADC_HandleTypeDef *adcHandle) {GPIO_InitTypeDef GPIO_InitStruct {0};if (adcHandle-Instance ADC1){__HAL_RCC_ADC1_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();/**ADC1 GPIO ConfigurationPC1 ------ ADC1_IN11*/GPIO_InitStruct.Pin GPIO_PIN_1;GPIO_InitStruct.Mode GPIO_MODE_ANALOG;HAL_GPIO_Init(GPIOC, GPIO_InitStruct);/* ADC1 DMA Init *//* ADC1 Init */hdma_adc1.Instance DMA1_Channel1;hdma_adc1.Init.Direction DMA_PERIPH_TO_MEMORY;hdma_adc1.Init.PeriphInc DMA_PINC_DISABLE;hdma_adc1.Init.MemInc DMA_MINC_DISABLE;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_HIGH;if (HAL_DMA_Init(hdma_adc1) ! HAL_OK){Error_Handler();}__HAL_LINKDMA(adcHandle, DMA_Handle, hdma_adc1);}else if (adcHandle-Instance ADC2){__HAL_RCC_ADC2_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();/**ADC2 GPIO ConfigurationPC1 ------ ADC2_IN11*/GPIO_InitStruct.Pin GPIO_PIN_1;GPIO_InitStruct.Mode GPIO_MODE_ANALOG;HAL_GPIO_Init(GPIOC, GPIO_InitStruct);} }void HAL_ADC_MspDeInit(ADC_HandleTypeDef *adcHandle) {if (adcHandle-Instance ADC1){__HAL_RCC_ADC1_CLK_DISABLE();/**ADC1 GPIO ConfigurationPC1 ------ ADC1_IN11*/HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1);/* ADC1 DMA DeInit */HAL_DMA_DeInit(adcHandle-DMA_Handle);}else if (adcHandle-Instance ADC2){/* Peripheral clock disable */__HAL_RCC_ADC2_CLK_DISABLE();/**ADC2 GPIO ConfigurationPC1 ------ ADC2_IN11*/HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1);} } /*** brief System Clock Configuration* retval None*/ void SystemClock_Config(void) {RCC_PeriphCLKInitTypeDef PeriphClkInit {0};...PeriphClkInit.PeriphClockSelection RCC_PERIPHCLK_ADC;PeriphClkInit.AdcClockSelection RCC_ADCPCLK2_DIV6;if (HAL_RCCEx_PeriphCLKConfig(PeriphClkInit) ! HAL_OK){Error_Handler();} } 测试环节 float ADC_ConvertedValueLocal[2]; uint32_t ADC_ConvertedValue;int test(void) {初始化HAL_ADCEx_Calibration_Start(hadc1);HAL_ADCEx_Calibration_Start(hadc2);/* 启动AD转换并使能DMA传输和中断 */HAL_ADC_Start(hadc2);HAL_ADCEx_MultiModeStart_DMA(hadc1, ADC_ConvertedValue, sizeof(ADC_ConvertedValue));while (1){HAL_Delay(1000);// ADC1的值ADC_ConvertedValueLocal[0] (float)(ADC_ConvertedValue 0xFFF) * 3.3 / 4096; // ADC2的值ADC_ConvertedValueLocal[1] (float)((ADC_ConvertedValue16) 0xFFF) * 3.3 / 4096; printf(ADC1 电压值 %f V \r\n, ADC_ConvertedValueLocal[0]); printf(ADC2 电压值 %f V \r\n, ADC_ConvertedValueLocal[1]); } } 实验现象 同实验1 实验5双ADC多通道同步规则采集 硬件原理图和USART配置 对硬件原理图的PC0、PC1进行ADC配置具体看实验1。 同步规则模式 该模式在规则通道组上启动。外部触发源来自于ADC1的规则组复用器由ADC1_CR2EXTSEL[2:0]位决定。为ADC2提供一个同步触发器。 不要在两个ADC上转换同一通道转换同一通道时两个ADC没有重叠采样时间。 在ADC1或ADC2上的转换事件结束时 生成一个32位的DMA传输请求如果设置了DMA位该请求将 ADC1_DR 寄存器传输到SRAMADC2转换的数据在高16位ADC1转换的数据在低16位。 当ADC1/ADC2规则通道全部转换结束时生成EOC中断如果在两个ADC接口之一上启用。 在同步规则模式下应该为两个通道配置完全相同的采样时间这两个通道将被ADC1和ADC2同时采样。 ADC配置 ADC_HandleTypeDef hadc1; ADC_HandleTypeDef hadc2; DMA_HandleTypeDef hdma_adc1;void MX_ADC1_Init(void) {ADC_MultiModeTypeDef multimode {0};ADC_ChannelConfTypeDef sConfig {0};/** Common config*/hadc1.Instance ADC1;hadc1.Init.ScanConvMode ADC_SCAN_DISABLE;hadc1.Init.ContinuousConvMode ENABLE;hadc1.Init.DiscontinuousConvMode DISABLE;hadc1.Init.ExternalTrigConv ADC_SOFTWARE_START;hadc1.Init.DataAlign ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion 1;if (HAL_ADC_Init(hadc1) ! HAL_OK){Error_Handler();}/** Configure the ADC multi-mode*/multimode.Mode ADC_DUALMODE_REGSIMULT;if (HAL_ADCEx_MultiModeConfigChannel(hadc1, multimode) ! HAL_OK){Error_Handler();}/** Configure Regular Channel*/sConfig.Channel ADC_CHANNEL_11;sConfig.Rank ADC_REGULAR_RANK_1;sConfig.SamplingTime ADC_SAMPLETIME_1CYCLE_5;if (HAL_ADC_ConfigChannel(hadc1, sConfig) ! HAL_OK){Error_Handler();} }void MX_ADC2_Init(void) {ADC_ChannelConfTypeDef sConfig {0};/** Common config*/hadc2.Instance ADC2;hadc2.Init.ScanConvMode ADC_SCAN_DISABLE;hadc2.Init.ContinuousConvMode ENABLE;hadc2.Init.DiscontinuousConvMode DISABLE;hadc2.Init.ExternalTrigConv ADC_SOFTWARE_START;hadc2.Init.DataAlign ADC_DATAALIGN_RIGHT;hadc2.Init.NbrOfConversion 1;if (HAL_ADC_Init(hadc2) ! HAL_OK){Error_Handler();}/** Configure Regular Channel*/sConfig.Channel ADC_CHANNEL_10;sConfig.Rank ADC_REGULAR_RANK_1;sConfig.SamplingTime ADC_SAMPLETIME_1CYCLE_5;if (HAL_ADC_ConfigChannel(hadc2, sConfig) ! HAL_OK){Error_Handler();} }void HAL_ADC_MspInit(ADC_HandleTypeDef *adcHandle) {GPIO_InitTypeDef GPIO_InitStruct {0};if (adcHandle-Instance ADC1){ __HAL_RCC_ADC1_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();/**ADC1 GPIO ConfigurationPC1 ------ ADC1_IN11*/GPIO_InitStruct.Pin GPIO_PIN_1;GPIO_InitStruct.Mode GPIO_MODE_ANALOG;HAL_GPIO_Init(GPIOC, GPIO_InitStruct);/* ADC1 DMA Init *//* ADC1 Init */hdma_adc1.Instance DMA1_Channel1;hdma_adc1.Init.Direction DMA_PERIPH_TO_MEMORY;hdma_adc1.Init.PeriphInc DMA_PINC_DISABLE;hdma_adc1.Init.MemInc DMA_MINC_DISABLE;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_HIGH;if (HAL_DMA_Init(hdma_adc1) ! HAL_OK){Error_Handler();}__HAL_LINKDMA(adcHandle, DMA_Handle, hdma_adc1);}else if (adcHandle-Instance ADC2){__HAL_RCC_ADC2_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();/**ADC2 GPIO ConfigurationPC0 ------ ADC2_IN10*/GPIO_InitStruct.Pin GPIO_PIN_0;GPIO_InitStruct.Mode GPIO_MODE_ANALOG;HAL_GPIO_Init(GPIOC, GPIO_InitStruct);} }void HAL_ADC_MspDeInit(ADC_HandleTypeDef *adcHandle) {if (adcHandle-Instance ADC1){__HAL_RCC_ADC1_CLK_DISABLE();/**ADC1 GPIO ConfigurationPC1 ------ ADC1_IN11*/HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1);/* ADC1 DMA DeInit */HAL_DMA_DeInit(adcHandle-DMA_Handle);}else if (adcHandle-Instance ADC2){__HAL_RCC_ADC2_CLK_DISABLE();/**ADC2 GPIO ConfigurationPC0 ------ ADC2_IN10*/HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0);} } /*** brief System Clock Configuration* retval None*/ void SystemClock_Config(void) {RCC_PeriphCLKInitTypeDef PeriphClkInit {0};...PeriphClkInit.PeriphClockSelection RCC_PERIPHCLK_ADC;PeriphClkInit.AdcClockSelection RCC_ADCPCLK2_DIV6;if (HAL_RCCEx_PeriphCLKConfig(PeriphClkInit) ! HAL_OK){Error_Handler();} } 测试环节 float ADC_ConvertedValueLocal[2]; uint32_t ADC_ConvertedValue;int test(void) {初始化HAL_ADCEx_Calibration_Start(hadc1);HAL_ADCEx_Calibration_Start(hadc2);/* 启动AD转换并使能DMA传输和中断 */HAL_ADC_Start(hadc2);HAL_ADCEx_MultiModeStart_DMA(hadc1, ADC_ConvertedValue, sizeof(ADC_ConvertedValue));while (1){HAL_Delay(1000);// ADC1的值ADC_ConvertedValueLocal[0] (float)(ADC_ConvertedValue 0xFFF) * 3.3 / 4096; // ADC2的值ADC_ConvertedValueLocal[1] (float)((ADC_ConvertedValue16) 0xFFF) * 3.3 / 4096; printf(ADC1 电压值 %f V \r\n, ADC_ConvertedValueLocal[0]); printf(ADC2 电压值 %f V \r\n, ADC_ConvertedValueLocal[1]); } } 实验现象 依次将PC0、PC1接到VCCADC依次输出3.3V。 实验6读取芯片温度
http://www.w-s-a.com/news/928935/

相关文章:

  • 青海建设厅网站通知wordpress如何改文章id
  • 国外搜索网站建设支付网站备案
  • 合肥建站公司有哪家招聘的拼车平台网站开发
  • 网站 备案 固话北京建站模板企业
  • 网站开发的公司wordpress分类目录 模版
  • flashfxp怎么上传对应网站空间wordpress无法创建
  • 建设网站案例分析做网站代理怎么赚钱
  • 唯品会网站建设特色域名备案期间 网站访问
  • 郑东新区建设局网站怎么做万网网站
  • 阿里云上传的网站 服务器路径试用网站开发
  • 做美食原创视频网站网站开发要多钱
  • 怎么做网站作业哪个网站可兼职做logo
  • asp网站搭建教程做网站备案完成之后需要干什么
  • 无锡外贸网站开发兰州网站在哪备案
  • 广州百度网站建设公司天津建设电工证查询网站
  • 网站建设与管理行业发展情况制作网页动态效果
  • wordpress 特色缩略图临沂seo全网营销
  • 隆昌市住房和城乡建设厅网站做网站用什么字体比较好
  • 惠州网站建设设计18款未成年禁用软件ap入口
  • 班级网站 建设目标如何做好网站建设内容的策划书
  • 网站建设与网页设计期末考试清博舆情系统
  • plone网站开发商城网站建设怎么收费
  • 旺旺号查询网站怎么做公司门户网站项目模版
  • 网站免费一站二站四站上海网站怎么备案表
  • 漫画交流网站怎么做开发微信小程序公司
  • 网站建设马鞍山怎么建立局域网网站
  • 开源 网站开发框架哪些网站可以做图片链接
  • 大良制作网站网站设计的能力要求
  • 前端设计除了做网站还能做什么江苏高校品牌专业建设工程网站
  • 做二手房产网站多少钱用户权限配置wordpress