stm32f103c8t6 的AD采集定时器2中断触发设置
时间: 2025-05-25 22:07:14 浏览: 19
### STM32F103C8T6 AD采集通过定时器2中断触发配置
在STM32F103C8T6微控制器中,可以通过TIM2的更新事件来触发ADC转换。以下是实现这一功能的具体方法:
#### 配置步骤说明
1. **启用相关外设时钟**
需要先开启GPIO、ADC和TIM2的相关时钟。这一步通常通过RCC_APB2PeriphClockCmd()和RCC_APB1PeriphClockCmd()完成[^1]。
2. **配置GPIO引脚作为模拟输入**
将用于ADC采样的GPIO引脚配置为模拟输入模式。例如,如果使用PA0通道,则需将其设置为模拟输入[^1]。
```c
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // 模拟输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
```
3. **初始化ADC模块**
设置ADC的工作参数,包括分辨率、扫描方向以及外部触发源等。这里需要将触发源设定为TIM2_TRGO信号[^1]。
```c
ADC_InitTypeDef ADC_InitStructure;
RCC_ADCCLKConfig(RCC_PCLK2_Div6); // 设置ADC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 单一通道模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;// 关闭连续转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2;
// TIM2 TRGO触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
```
4. **配置并启动TIM2定时器**
定义TIM2工作于PWM输入或其他适当模式下,并确保其能够产生TRGO信号以供ADC同步使用。
```c
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = 0xFFFF; // 自动重装载值
TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 分频系数 (假设SYSCLK=72MHz)
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);// 使用Update Event作为TRGO输出
TIM_Cmd(TIM2, ENABLE); // 启用TIM2
```
5. **使能DMA传输(可选)**
如果数据量较大或者希望减少CPU负担,可以考虑引入DMA机制来进行批量处理[^2]。
6. **最后激活全局中断和服务程序编写**
不仅要打开对应NVIC项允许接收来自ADC结束标志的通知消息,还需要定义好ISR服务例程以便及时响应这些请求事项[^1]。
```c
// 开启ADC中断
ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
// 配置NVIC优先级并解锁中断屏蔽状态位
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = ADC1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// 启动软件校准过程及正式测量活动
ADC_StartCalibration(ADC1);
while(!ADC_GetCalibrationStatus(ADC1));
ADC_EnableSoftwareStartConv(ADC1, ENABLE);
```
以上即完成了基于STM32F1系列MCU利用Timer2中断驱动Adc采样操作的整体流程描述。
---
阅读全文
相关推荐


















