ADC_RegularChannelConfig(ADC_x, ADC_CHANNEL, 1, ADC_SampleTime_55Cycles5); ADC_ITConfig(ADC_x, ADC_IT_EOC, ENABLE); // 配置ADC转换完成中断 ADC_Cmd(ADC_x, ENABLE); // 使能ADC ADC_ResetCalibration(ADC_x); // 初始化ADC 校准寄存器 while(ADC_GetResetCalibrationStatus(ADC_x)); // 等待...
生成代码后,在初始化完成启动ADC采样,如下: uint32_t adc_buf; HAL_ADCEx_Calibration_Start(&hadc); HAL_Delay(100); HAL_ADC_Start_DMA(&hadc,(uint32_t*)&adc_buf,1); 然后再ADC的中断中添加保存数据的程序即。 void ADC1_IRQHandler(void) { /* USER CODE BEGIN ADC1_IRQn 0 */ /* USER ...
编写测试接口函数test_get_ADC_value,将其放到中断文件stm32g4xx_it.c中ADC1_2_IRQHandler处调用。 仿真看看读取到的变量结果,如果我们将这个通道连接到VCC,数据会变成0x0FFF左右,接到GND,数据变成0x0000。 以上工程源代码,包括cubemx 生成的ioc文件都可以开源,有需要的小伙伴记得点赞之后私信哟 ...
STM32F103系列有3个ADC,精度为12位,每个ADC最多有16个外部通道。其中ADC1和ADC2都有16个外部通道,ADC3一般有8个外部通道,各通道的A/D转换可以单次、连续、扫描或间断执行,ADC转换的结果可以左对齐或右对齐储存在16位数据寄存器中。ADC的输入时钟不得超过14MHz,其时钟频率由PCLK2分频产生。 ADC功能框图讲解 学习S...
其次建立一个ADC.C和一个ADC.H文件,其中ADC.C中程序为: void ADC1_Init(void) { ADC1_GPIO_Config(); ADC1_Mode_Config(); } static void ADC1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; //开启外部时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | ...
{//配置ADC的模式,一个ADC是独立模式,2个是双模式 uint32_t ADC_Mode; /*!< Configures the ADC to operate in independent or dual mode. This parameter can be a value of @ref ADC_mode */ //配置ADC是否使用扫描,单通道不扫描,多通道扫描 ...
1.对应的ADC模块不同 ADC_IRQHandler: 这个中断服务例程通常对应的是ADC1或ADC2模块。在STM32H7系列中...
手动触发转换:11.12.3 ADC控制寄存器2(ADC_CR2) 其他事件触发转换:11.12.3 ADC控制寄存器2(ADC_CR2) 触发规则转换: 触发注入转换: 需要注意的是:还有两个位EXTTRIG和JEXTTRIG用来作为开关,是否打开其他事件能够触发ADC的转换。 在定时器的框图中,下图红色框2中,就是用来触发ADC转换的事件。
STM32F10X系列支持三路ADC,其ADC通道及对应IO口如下表所示: 其能接受的电压输入范围一般为0-3.3V(VREF- ≤ VIN ≤ VREF+),因此,如果需要测量超出0-3.3v量程范围的电压数据,需要在外围硬件增加分压电阻,将电路转换到0-3.3V量程范围内再进行采集。
除了这种庶民式的控制方法,ADC还支持外部事件触发转换,这个触发包括内部定时器触发和外部IO触发。触发源有很多,具体选择哪一种触发源,由ADC控制寄存器2:ADC_CR2的EXTSEL[2:0]和JEXTSEL[2:0]位来控制。EXTSEL[2:0]用于选择规则通道的触发源,JEXTSEL[2:0]用于选择注入通道的触发源。选定好触发源之后,触发源...