ADC外部触发方式中, TIM2_CC2事件 TIM3_TRGO事件 分别只什么事件呢? 怎么实现的(原理)?

402 篇文章 172 订阅

TIMx_TRGO,应该就是直接由外部控制定时器,定时器再控制ADC,实现cpu  0干预的adc触发。
TIM2_CC2,应该就是TIM2的溢出之类的事件,来触发ADC转换。也可能是捕捉和比较的英语单词的简称Capture/Compare

 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ADC_EXTERNALTRIGCONV_T2_CC2是ADC外部触发源,使用TIM2的CC2通道触发ADC转换。以下是基于STM32CubeMX和HAL库的代码实现: 1. 配置TIM2和ADC时钟 ``` /* TIM2 clock enable */ __HAL_RCC_TIM2_CLK_ENABLE(); /* ADC1 clock enable */ __HAL_RCC_ADC1_CLK_ENABLE(); ``` 2. 配置GPIO引脚和时钟 ``` /* Configure GPIO pin : PA1 */ GPIO_InitStruct.Pin = GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOA_CLK_ENABLE(); ``` 3. 配置TIM2为输出PWM模式,配置ADC为单通道转换模式 ``` /* TIM2 configuration */ htim2.Instance = TIM2; htim2.Init.Prescaler = 0; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 999; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; HAL_TIM_PWM_Init(&htim2); /* Configure PWM channel */ sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 500; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2); /* ADC configuration */ hadc1.Instance = ADC1; hadc1.Init.ScanConvMode = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T2_CC2; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; HAL_ADC_Init(&hadc1); /* Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_1; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; HAL_ADC_ConfigChannel(&hadc1, &sConfig); ``` 4. 配置TIM2的触发源和开启TIM2和ADC ``` /* Start PWM */ HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); /* Start ADC conversion */ HAL_ADC_Start(&hadc1); ``` 5. 在ADC转换完成中断中获取采样值 ``` void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { /* Get ADC value */ uint16_t adc_value = HAL_ADC_GetValue(hadc); /* Do something with the ADC value */ ... } ``` 以上是基于STM32CubeMX和HAL库的代码实现,需要根据实际情况进行修改。在这个例子中,TIM2的CC2通道触发ADC转换,所以需要确保TIM2的CC2通道输出的PWM信号能够触发ADC转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值