简述
用Tim1输出50Khz的PWM给PA0。
GPIO的复用模式,要选择“GPIO_AF13_TIM1”。
自动重装载值好像会减一半,不知道是我代码有问题还是其他的。
系统频率那边不知道有没有48Mhz,反正比默认的快。
代码Timer.c
#include "Timer.h"
TIM_HandleTypeDef TimHandle = {0};
//TIM_ClockConfigTypeDef sClockSourceConfig = {0};
//TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfig = {0};
//TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
void Init_Time1()
{
/* 初始化GPIOA0的EN引脚 */
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_PWM = {
.Pin = PWM_PIN, // A0
.Mode = GPIO_MODE_AF_PP, // 推挽复用模式
.Pull = GPIO_NOPULL, // 无上拉或下拉
.Speed = GPIO_SPEED_FREQ_VERY_HIGH, // 最高速度模式
.Alternate = SET_Alternate // 复用模式 AF 2:连接到 TIM1
};
/* GPIOA时钟使能 */
HAL_GPIO_Init(GPIOA, &GPIO_PWM);
/* TIM1时钟使能 */
__HAL_RCC_TIM1_CLK_ENABLE();
/* 系统时钟配置 */
//APP_SystemClockConfig();
TimHandle.Instance = TIM1; /* 选择TIM1 */
TimHandle.Init.Prescaler = PWM_Prescaler; /* 预分频 */
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP; /* 向上计数 */
TimHandle.Init.Period = PWM_Period; /* 自动重装载值 */
TimHandle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; /* 时钟不分频 */
TimHandle.Init.RepetitionCounter = 1 - 1;