STM32F103 CubeMX配置采样PWM的周期以及占空比

1,基础的时钟参数配置参考 文章PWM输出部分

2,定时器配置

通道1配置为直接模式,通道2配置为间接模式,复位,通道1采集的是PWM的周期,通道2采集的是PWM的高电平的时间,通过这两个通道的参数可以计算出周期以及占空比。

3,启动定时器2

 HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
  HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);

4,在中断中调用回调函数

uint16_t PWM_RisingCount=65535;
uint16_t PWM_FallingCount;
float duty;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)    
    //注意这里为HAL_TIM_ACTIVE_CHANNEL_1而不是TIM_CHANNEL_1
    {
        PWM_RisingCount = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);
        duty = (float)PWM_FallingCount / PWM_RisingCount;
    }
    if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
    {
        PWM_FallingCount = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2);
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32F103PWM采样ADC可以使用以下步骤实现: 1. 配置PWM输出,设置PWM计数器和周期值。 2. 配置ADC采样时钟和通道。 3. 在PWM中断函数里启动ADC采样。 4. 在ADC采样完成中断函数里读取采样值。 以下是示例代码: ```c //PWM配置 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; //配置TIM3时钟,设置计数器和周期值 TIM_TimeBaseStructure.TIM_Period = 999; TIM_TimeBaseStructure.TIM_Prescaler = 71; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //配置TIM3 PWM输出 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 499; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //开启TIM3 TIM_Cmd(TIM3, ENABLE); //ADC配置 ADC_InitTypeDef ADC_InitStructure; //配置ADC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //配置ADC采样时钟 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_CC1; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_Init ### 回答2: 要用C语言实现STM32F103PWM采样ADC,首先需要配置ADC和PWM模块。 1. 配置ADC模块: a. 选择要使用的ADC通道,并设置引脚为ADC输入模式。 b. 初始化ADC模块,设置采样分辨率、采样周期等参数。 c. 配置ADC触发源,可以选择定时器或外部触发源。 d. 开启ADC模块。 2. 配置PWM模块: a. 选择要使用的PWM通道,并设置引脚为PWM输出模式。 b. 初始化PWM模块。 c. 设置PWM占空比。 3. 在代码中,可以使用定时器产生PWM信号,控制PWM占空比。可以通过改变占空比来调整输出电压,从而实现ADC采样电压的变化。 4. 在ADC采样时,可以设置触发ADC转换的条件,例如定时器中断触发。当触发条件满足时,执行ADC转换。 a. 启动ADC转换。 b. 等待ADC转换完成。 c. 读取ADC数据寄存器的值,得到采样的电压值。 d. 根据采样电压值,修改PWM占空比,控制输出电压。 需要注意的是,在配置ADC和PWM模块时,需要查阅STM32F103的参考手册,了解寄存器配置和功能实现。此外,可以使用STM32的官方库或第三方库进行封装和简化操作。以上是一个简单的示例,实际应用中可能需要根据具体需求进行适当调整和扩展。 ### 回答3: 要实现 STM32F103PWM 采样 ADC,你需要使用 C 语言来编写代码。 首先,你需要配置 ADC 和 PWM 的相关寄存器。通过 RCC 寄存器,使能 ADC 和 PWM 的时钟。然后,设置 ADC 和 PWM 的引脚。使用 GPIO 初始化函数,将需要的引脚设置为 ADC 输入引脚和 PWM 输出引脚。 然后,配置 ADC 模式和精度。选择合适的采样时间,使得 ADC 能够稳定地进行采样配置 ADC 的输入通道,选择需要采样的引脚。 接下来,配置 PWM 定时器。设置 PWM 定时器的计数时钟和分频系数,以确定 PWM 的频率和占空比。设置 PWM 的模式为 PWM 模式,并根据需要,设置 PWM占空比。 在主循环中,你需要不断地进行采样和输出 PWM。使用 ADC 启动转换函数,开始进行采样。等待 ADC 转换完成,并获取采样结果。根据采样结果,计算 PWM占空比,并使用 PWM 输出函数进行输出。 完成以上步骤后,你可以使用 C 语言编译器编译代码,并下载到 STM32F103 微控制器中运行。此时,在 ADC 的输入引脚上输入待采样的信号,通过 PWM 输出引脚可以观察到 PWM 波形。 需要注意的是,为了正确实现 PWM 采样 ADC,你还需要根据具体的硬件规格和需求进行相关的配置和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值