您现在的位置: 主页 > 嵌入式开发入门到精通 > 单片机技术进阶 > STM32如何产生PWM信号 -
本文所属标签:
为本文创立个标签吧:

STM32如何产生PWM信号 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-08 

[导读]本文实践用到的芯片为:STM32F103VET6。文中所述内容符合同系列芯片的应用。本文适合初学者阅读。上面是在STM32引脚PA0上测得的频率为1KHz占空比为25%的PWM信号。下面讲如何实现。如上图所示,我们使用定时器2通道1产

本文实践用到的芯片为:STM32F103VET6。文中所述内容符合同系列芯片的应用。本文适合初学者阅读。

本文引用地址: http://www.21ic.com/app/mcu/201808/784459.htm

上面是在STM32引脚PA0上测得的频率为1KHz占空比为25%的PWM信号。下面讲如何实现。

如上图所示,我们使用定时器2通道1产生PWM。

执行思想:1.需要把引脚配置为复用推挽输出;2.需要配置定时器2。

1.配置引脚

我们用库函数实现的话,肯定要涉及到GPIO初始化配置结构体,所以需要定义一个GPIO_InitTypeDef类型的结构体变量,然后把变量成员配置好。

2.配置定时器2

我们用库函数的话,一是要涉及到定时器的基本配置结构体,所以需要定义一个TIM_TimeBaseInitTypeDef类型的结构体变量,然后把变量成员配置好。二是需要使用TIM_OC1Init()函数输出PWM信号,所以还需要定义一个TIM_OCInitTypeDef类型的结构体变量,然后把变量成员配置好。

程序如下:

voidPA0_PWM(void){GPIO_InitTypeDefGPIO_InitStruct;//GPIO初始化结构体变量TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStruct;//定时器基本初始化结构体变量TIM_OCInitTypeDefTIM_OCInitStruct;//定时器OC输出结构体初始化变量/*允许TIM2*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);/*允许GPIOA*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);/*选择PA0*/GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;/*复用推挽输出*/GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;/*引脚最大输出频率*/GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;/*配置*/GPIO_Init(GPIOA,&GPIO_InitStruct);/*周期1000*/TIM_TimeBaseInitStruct.TIM_Period=999;/*定时器时间间隔1微秒*/TIM_TimeBaseInitStruct.TIM_Prescaler=71;/*向上计数*/TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;/*配置*/TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);/*选择PWM1模式*/TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;/*允许输出模式*/TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;/*匹配值*/TIM_OCInitStruct.TIM_Pulse=249;/*设置小于匹配值时为高电平*/TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;/*使能定时器2的通道1*/TIM_OC1Init(TIM2,&TIM_OCInitStruct);/*打开定时器2*/TIM_Cmd(TIM2,ENABLE);}

执行上面的函数,即可在PA0引脚上输出占空比为25%频率为1KHz的PWM信号了。结构上面的描述和程序里面的描述,上面的程序就很好理解了。




              查看评论 回复



 

"STM32如何产生PWM信号 -"的相关文章

网站地图

围观()