打印
[应用相关]

STM32F103VET6 实现产生PWM信号的过程

[复制链接]
1051|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cr315|  楼主 | 2021-10-13 16:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本文实践用到的芯片为:STM32F103VET6。文中所述内容符合同系列芯片的应用。

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

如上图所示,我们使用定时器2通道1产生PWM。
执行思想:1.需要把引脚配置为复用推挽输出;2.需要配置定时器2。
1.配置引脚
我们用库函数实现的话,肯定要涉及到GPIO初始化配置结构体,所以需要定义一个GPIO_InitTypeDef类型的结构体变量,然后把变量成员配置好。
2.配置定时器2
我们用库函数的话,一是要涉及到定时器的基本配置结构体,所以需要定义一个TIM_TimeBaseInitTypeDef类型的结构体变量,然后把变量成员配置好。二是需要使用TIM_OC1Init()函数输出PWM信号,所以还需要定义一个TIM_OCInitTypeDef类型的结构体变量,然后把变量成员配置好。
程序如下:
  • void PA0_PWM(void)
  • {
  • GPIO_InitTypeDef GPIO_InitStruct; // GPIO初始化结构体变量
  • TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;// 定时器基本初始化结构体变量
  • TIM_OCInitTypeDef TIM_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信号了。结构上面的描述和程序里面的描述。

使用特权

评论回复
沙发
yangxiaor520| | 2021-10-14 07:35 | 只看该作者
谢谢楼主分享,最近也在学PWM。

使用特权

评论回复
板凳
wakayi| | 2021-11-4 09:57 | 只看该作者
使用的普通的定时器吗

使用特权

评论回复
地板
labasi| | 2021-11-4 10:00 | 只看该作者
最高频率能达到多少啊

使用特权

评论回复
5
paotangsan| | 2021-11-4 10:01 | 只看该作者
这个系列的可以同时输出多少路呢

使用特权

评论回复
6
renzheshengui| | 2021-11-4 10:04 | 只看该作者
实际用还是需要接驱动芯片是吗

使用特权

评论回复
7
木木guainv| | 2021-11-4 10:23 | 只看该作者
单独一个通道的还是很简单的

使用特权

评论回复
8
wowu| | 2021-11-4 10:25 | 只看该作者
主要用来做什么呢

使用特权

评论回复
9
gygp| | 2021-11-4 22:33 | 只看该作者
脉冲宽度调制吧   

使用特权

评论回复
10
chenci2013| | 2021-11-4 22:33 | 只看该作者
用一个定时器产生两路PWM输出?   

使用特权

评论回复
11
biechedan| | 2021-11-4 22:33 | 只看该作者
STM32的高级定时器TIM1产生PWM

使用特权

评论回复
12
wangdezhi| | 2021-11-4 22:33 | 只看该作者
通用定时器产生pwm   

使用特权

评论回复
13
isseed| | 2021-11-4 22:33 | 只看该作者
stm32输出pwm频率是如何计算的  

使用特权

评论回复
14
xietingfeng| | 2021-11-4 22:34 | 只看该作者
怎么产生可变占空比的pwm波

使用特权

评论回复
15
suzhanhua| | 2021-11-4 22:34 | 只看该作者
怎么用STM32配置产生PWM

使用特权

评论回复
16
mituzu| | 2021-11-4 22:34 | 只看该作者
怎么用定时器产生多路的pwm 波

使用特权

评论回复
17
hellosdc| | 2021-11-4 22:34 | 只看该作者
最多可以输出多少个PWM  

使用特权

评论回复
18
uiint| | 2021-11-4 22:34 | 只看该作者
pwm输出怎么设置频率  

使用特权

评论回复
19
biechedan| | 2021-11-4 22:34 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1227

主题

3251

帖子

0

粉丝