合宙AIR001 使用定时器Time1输出PWM波形

文章详细描述了如何在STM32中使用TIM1生成48MHz的PWM信号,配置GPIO_A0为PWM输出,涉及到GPIO复用模式选择、TIM初始化、系统时钟配置以及错误处理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

        用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;            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值