蓝桥杯STM32G431RBT6学习——定时器PWM输出

蓝桥杯STM32G431RBT6学习——定时器PWM输出

前言

PWM波输出作为定时器的一个常用功能,也属于高频的考点。从数据手册的定时器解析可以了解到(上篇描述):除了基本定时器(TIM6、7)外,其他所有定时器均能进行PWM信号输出。
从数据手册的P61~P66页可以清楚得查看定时器的各个通道所绑定的引脚(清楚个JB)

PA组引脚外设分布
在这里插入图片描述
PB组引脚外设分布
在这里插入图片描述
PC组引脚外设分布
在这里插入图片描述
PD组引脚外设分布
在这里插入图片描述
PE组引脚外设分布
在这里插入图片描述

STM32CubeMX配置

在正式比赛中都会要求PWM输出所使用的具体引脚,可以通过在CubeMX中查看这些引脚都支持哪些定时器,直接点击芯片的引脚,在弹出的列表中查看。
此处以PA6为例,该引脚支持TIM16的通道1及TIM3的通道1,在使用时进行合理选择即可。
在这里插入图片描述
此处使用TIM3的通道1,选择其时钟源为内部时钟源,并将通道1使能为PWM输出。
在这里插入图片描述
配置其频率及初始占空比
定时器频率 = 80MHZ/分频系数/计数值
0<占空比<计数值
在这里插入图片描述

Keil代码编写
PWM输出相关API:

启动/暂停PWM输出
依旧不理解此处为何使用阻塞模式

HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);

参数1:所使用的定时器类型指针(句柄),于CubeMX生成的定时器.h文件中定义;
参数2:所使用的通道号(例:TIM_CHANNEL_1)
设置PWM占空比
此处貌似并非真正的函数,底层是直接操作寄存器进行宏定义(C语言知道不足)

__HAL_TIM_SetCompare(__HANDLE__,__CHANNEL__,__COMPARE__);

参数1:所使用的定时器类型指针(句柄),于CubeMX生成的定时器.h文件中定义;
参数2:所使用的通道号(例:TIM_CHANNEL_1);
参数3:占空比,大小应处于0到计数值(CubeMX配置)之间
设置PWM频率
PWM的频率与预分频系数、计数周期有关,该函数用于修改预分频系数

__HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__)

参数1:所使用的定时器类型指针(句柄),于CubeMX生成的定时器.h文件中定义;
参数2:修改后的预分频系数

后记

强推一下逻辑分析仪的妙用,此物甚至可以直接作为简单示波器使用,配置一下就可以查看波形频率,周期等数据,且携带体积超小。
在这里插入图片描述

<think>嗯,用户想了解如何在STM32G431RBT6上配置PWM输出。首先,我需要回忆一下STM32PWM生成机制。STM32定时器通常用于产生PWM信号,特别是高级定时器和通用定时器STM32G4系列可能有不同的配置方式,但基本步骤应该类似。 接下来,我需要考虑用户提供的引用内容。引用[1]提到了使用PWM控制LED亮度,但具体是STM32F103,可能需要调整到G4系列。引用[2]是关于输入捕获的,可能不直接相关,但HAL库的使用方法可能有参考价值。引用[3]提到在G431RBT6上移植FreeRTOS,说明用户可能有该开发板,需要针对该型号的具体定时器和引脚进行配置。 首先,确定STM32G431RBT6定时器资源。查阅资料,G4系列的定时器如TIM1、TIM2等,支持PWM输出。需要选择一个合适的定时器和通道,比如TIM1_CH1对应的GPIO引脚。 然后,配置步骤可能包括:启用定时器时钟,配置GPIO为复用功能,设置定时器的预分频器和自动重载值以确定PWM频率,配置PWM模式(如PWM模式1或2),启用通道,最后启动定时器。用户可能需要使用HAL库函数,如HAL_TIM_PWM_Start。 此外,占空比的计算涉及自动重载值(ARR)和比较寄存器(CCR)。频率由ARR和预分频器(PSC)以及时钟频率共同决定。例如,若系统时钟为170MHz,预分频设为16999,ARR设为999,则PWM频率为170MHz / (17000 * 1000) = 10Hz?可能需要重新计算。 用户可能需要具体的代码示例,包括初始化函数和修改占空比的方法。同时,要注意GPIO的复用功能是否正确,是否开启了定时器时钟。可能还需要提到使用STM32CubeMX进行图形化配置,这可以简化步骤。 最后,确保回答结构清晰,分步骤说明,并提供相关参数的计算方法。可能的问题包括如何调整频率和占空比,或如何同时输出多路PWM。需要检查是否有遗漏的配置步骤,比如中断或DMA的使用,但基本PWM输出可能不需要这些。</think>### STM32G431RBT6 PWM输出配置教程 在STM32G431RBT6上实现PWM输出,需通过定时器PWM模式配置,以下是基于HAL库的详细步骤: --- #### 一、硬件连接 假设使用TIM1通道1输出PWM波: 1. 查找芯片手册确定TIM1_CH1对应引脚(例如PA8) 2. 连接LED正极到PA8,负极通过电阻接地 --- #### 二、CubeMX配置(关键步骤) 1. **时钟配置** 系统时钟设为170MHz(STM32G4默认高频内部时钟HSI) $$ f_{CLK} = 170MHz $$ 2. **定时器参数** - 选择TIM1,设置通道1为PWM Generation CH1 - Prescaler(预分频器):169 $$ f_{TIM} = \frac{170MHz}{(169+1)} = 1MHz $$ - Counter Period(自动重载值):999 $$ PWM频率 = \frac{1MHz}{999+1} = 1kHz $$ - Pulse(初始占空比):500(即50%) 3. **GPIO设置** 配置PA8为Alternate Function模式,复用为TIM1_CH1 --- #### 三、代码实现(基于HAL库) ```c // 1. 定时器初始化 MX_TIM1_Init(); // 2. 启动PWM通道 HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); // 3. 动态修改占空比(示例设置为75%) __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 750); ``` --- #### 四、参数计算公式 1. **PWM频率计算** $$ f_{PWM} = \frac{f_{TIM}}{(ARR + 1)} $$ - $f_{TIM}$:定时器时钟频率 - $ARR$:自动重载寄存器值 2. **占空比计算** $$ D = \frac{CCR}{ARR + 1} \times 100\% $$ - $CCR$:捕获/比较寄存器值 --- #### 五、验证方法 1. 使用示波器测量PA8引脚波形 2. 观察LED亮度随占空比变化 3. 通过调试模式查看寄存器值 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值