第8章 TIM-输出PWM
第八章 TIM-输出PWM
1. PWM介绍
PWM是脉冲宽度调制,具有两个非常重要的参数:频率和占空比。
- 频率:PWM的频率是整个周期的倒数。
- 占空比:占空比是指一个周期内高电平所占的比例。
2. 软件设计
2.1 编程大纲
-
定时器配置
-
主函数测试
2.2 代码分析
2.2.1 TIM输出PWM模式配置
#include "tim.h"
void TIMx_Init(void)
{
/* 通道GPIO配置 */
__RCC_GPIOB_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.Pins = GPIO_PIN_0;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
PB00_AFx_GTIM1CH3(); // PB0复用为GTIM1_CH3
GPIO_Init(CW_GPIOB, &GPIO_InitStructure);
/* 定时器配置 */
__RCC_GTIM1_CLK_ENABLE();
GTIM_InitTypeDef GTIM_InitStructure;
GTIM_InitStructure.Mode = GTIM_MODE_TIME;
GTIM_InitStructure.OneShotMode = GTIM_COUNT_CONTINUE; // 循环计数模式
GTIM_InitStructure.Prescaler = GTIM_PRESCALER_DIV64; // 64Mhz/64 = 1MHz
GTIM_InitStructure.ReloadValue = 5000; // 重载值设置
GTIM_InitStructure.ToggleOutState = DISABLE; // 禁止输出翻转
GTIM_TimeBaseInit(CW_GTIM1, >IM_InitStructure);
GTIM_OCInit(CW_GTIM1, GTIM_CHANNEL3, GTIM_OC_OUTPUT_PWM_HIGH); // 使能GTIM1_CH3输出高电平PWM
GTIM_SetCompare3(CW_GTIM1, 2500); // 设置比较值,占空比为50%
GTIM_Cmd(CW_GTIM1, ENABLE);
}
/* 计算过程
系统时钟:64MHz
定时器频率(PWM) = 系统时钟/分频系数 = 64 000 000 / 64 = 1 000 000 = 1MHz
PWM周期:重载值*定时器频率 = 5000 * 1 = 5000us = 5ms
PWM的频率为:1/T = 1/5ms = 200Hz
*/
2.2.2 主函数
#include "main.h"
#include "systick.h"
#include "led.h"
#include "tim.h"
int32_t main(void)
{
Led_Init();
SysTick_Init();
TIMx_Init();
while(1)
{
}
}
本文作者:hazy1k
本文链接:https://www.cnblogs.com/hazy1k/p/18715563
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步