STM32 HAL库 PWM输出配置记录

芯片型号: STM32F030R8T6 

      通道 :TIM3_CH2

输出引脚:PA7

引脚配置

 

 

分频系数,装载值,占空比配置

占空比 = 脉宽值(Pulse)/装载值(Period)*100% = 950/1000 * 100% = 95%

 

如果PWM没有输出请检查下面几项:

1. 定时器的时钟 internal 
2. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); // 打开 PWM 
3. 重新设置占空比 TIM3->CCR2 = 999; // 这个没有库函数,只能操作寄存器

 

 

 

 

  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32 HAL库中使用PWM输出,需要进行以下步骤: 1. 初始化定时器:使用HAL_TIM_Base_MspInit函数初始化定时器。 2. 设置定时器参数:使用HAL_TIM_Base_Init函数设置定时器的参数,包括时钟频率、计数模式等。 3. 初始化PWM输出通道:使用HAL_TIM_PWM_MspInit函数初始化PWM输出通道。 4. 设置PWM输出通道参数:使用HAL_TIM_PWM_ConfigChannel函数设置PWM输出通道的参数,包括输出频率、占空比等。 5. 启动PWM输出:使用HAL_TIM_PWM_Start函数启动PWM输出。 下面是一个简单的PWM输出代码示例: ```c #include "stm32f4xx_hal.h" TIM_HandleTypeDef htim3; void SystemClock_Config(void); int main(void) { HAL_Init(); SystemClock_Config(); // 初始化定时器 htim3.Instance = TIM3; htim3.Init.Prescaler = 0; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 999; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(&htim3); // 初始化PWM输出通道 TIM_OC_InitTypeDef sConfigOC; htim3.Init.PWMOutput = TIM_PWM_MODE_PWM1; HAL_TIM_PWM_Init(&htim3); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 500; // 占空比为50% sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1); // 启动PWM输出 HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); while (1) { // 主循环中可以修改占空比 sConfigOC.Pulse = 250; // 占空比为25% HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1); HAL_Delay(1000); sConfigOC.Pulse = 750; // 占空比为75% HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1); HAL_Delay(1000); } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 7; HAL_RCC_OscConfig(&RCC_OscInitStruct); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); } ``` 这个示例代码使用了TIM3通用定时器的第一个通道作为PWM输出通道,并在主循环中修改了占空比。你可以根据实际需求修改定时器和通道号,以及占空比的值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值