野火STM32_HAL库版课程笔记-TIM通道输出应用之PWM实现呼吸灯

前置介绍

呼吸灯

PWM 占空比高 -> LED 亮度高

PWM 占空比低 -> LED 亮度低

项目配置

TIM 2
  1. 首先引脚选择 PA1, PA2, PA3, 设置为 TIM2_CH2, TIM2_CH3, TIM2_CH4
  2. 然后到 TIM 的 Mode 配置中, 配置 CLock Source 为 Internal Clock
  3. Channel2, Channel3, Channel4 分别设置为 PWM Generation CH2, CH3, CH4
  4. 然后到 Parameter Settings 中
  5. 配置 Prescaler 预分频为 72-1
  6. 配置 Counter Period 为 1000 - 1
  7. 下面的三个通道 (CH2, CH3, CH4) 的 CH Polarity (通道输出电压极性, 即哪个电平代表 "开启" 状态)
    1. 因为 LED 是低电平点亮, 所以这里需要将都设置成为 Low (低电平)

代码部分

复制代码
/* USER CODE BEGIN PV */

uint16_t pwm_val = 0; // CCR的值 (修改占空比)
int8_t dir = 10;      // 变亮: 10, 变暗: -10

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
  
  // 启动 PWM
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    
    // 设置 PWM 占空比
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, pwm_val);
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, pwm_val);
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, pwm_val);
    
    // 调整占空比
    pwm_val += dir;
    
    if (pwm_val >= 1000)  dir = -10;  // 到顶翻转
    if (pwm_val <= 0)     dir = 10;

    HAL_Delay(5); // 控制呼吸灯节奏 (数字越大节奏越慢)
    
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

程序现象

成功实现呼吸灯效果

相关推荐
日拱一卒的小田3 小时前
ZYNQ学习笔记4-ZYNQ的SD卡控制器1
笔记·学习
xx~t4 小时前
嵌入式学习——ARM1
linux·arm开发·嵌入式硬件·arm
xx~t4 小时前
嵌入式——ARM1(详细篇)
linux·arm开发·嵌入式硬件·arm
商业白皮书5 小时前
VC 机构 Portfolio 内 AI 初创企业占比较高,可优先选择哪些具备 AI 技术与算力能力的云平台?
笔记
周洲08305 小时前
STM32 ADC 采集实战|电压采集、分压计算、数据滤波
stm32·单片机·嵌入式硬件
Fico fly5 小时前
SAP使用HTTP请求网络放行
笔记
狂奔蜗牛(bradley)6 小时前
搞定100ns抖动:ARM+FPGA混合EtherCAT主站实战方案
嵌入式硬件·fpga开发
钓鱼的肝6 小时前
梳理(1-5)
c++·经验分享·笔记·算法·青少年编程
SKH.6 小时前
单片机(2)
单片机
HZZD_HZZD7 小时前
CSDN_批发市场水电漏损归因算法LAM的原理与落地
嵌入式硬件·物联网·算法