基于stm32F103C8T6,写一个代码,实现输出两个pwm
时间: 2024-06-09 19:07:49 浏览: 67
STM32F103ZET6 PWM输出.zip_pwm stm32_stm32 pwm输出_stm32GPIO_stm32输
5星 · 资源好评率100%
好的,以下是基于STM32F103C8T6的PWM输出代码示例:
```c
#include "stm32f10x.h"
void PWM_Init(void);
int main(void)
{
PWM_Init(); // 初始化PWM
while(1)
{
TIM_SetCompare1(TIM2, 500); // 设置通道1的占空比
TIM_SetCompare2(TIM2, 1000); // 设置通道2的占空比
}
}
void PWM_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 使能TIM2时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // 设置GPIO引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 设置GPIO模式为复用输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置GPIO输出速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIO
TIM_TimeBaseStructure.TIM_Prescaler = 71; // 设置预分频值,即为72MHz/(71+1)=1MHz
TIM_TimeBaseStructure.TIM_Period = 2000; // 设置计数器周期,即为1MHz/2000=500Hz
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 设置计数器模式为向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // 初始化TIM2计数器
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 设置PWM模式为模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 使能输出通道
TIM_OCInitStructure.TIM_Pulse = 0; // 设置初始占空比为0
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 设置输出极性为正极性
TIM_OC1Init(TIM2, &TIM_OCInitStructure); // 初始化TIM2通道1
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 设置PWM模式为模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 使能输出通道
TIM_OCInitStructure.TIM_Pulse = 0; // 设置初始占空比为0
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 设置输出极性为正极性
TIM_OC2Init(TIM2, &TIM_OCInitStructure); // 初始化TIM2通道2
TIM_Cmd(TIM2, ENABLE); // 使能TIM2
}
```
在上面的代码中,我们使用了定时器TIM2的两个通道来输出PWM信号。其中,TIM2的时钟频率为72MHz,我们设置了预分频值为71,即计数器时钟频率为1MHz。我们设置了计数器周期为2000,即PWM信号的频率为500Hz。在主函数中,我们不断地设置了通道1和通道2的占空比,从而可以控制PWM信号的输出。
阅读全文