[STM32H5] 【STM32 Nucleo-64测评】+4、PWM实现呼吸灯

[复制链接]
 楼主| xu@xupt 发表于 2024-8-15 00:20 | 显示全部楼层 |阅读模式
<
本帖最后由 xu@xupt 于 2024-8-15 21:27 编辑

一、配置
首先,搜索STM32H533RE。基于STM32CubeMX,选择开发板对应的芯片型号。
da70495f3bec250ef652fa268d6bab25
其次,选择不适用TrustZone。开发板具有TrustZone能力,可以选择是否使用TrustZone。
21f9195eab3cde71d590e8baa91f1f6b
再次,配置RCC。High Speed Clock (HSE),Crystal/Ceramic Resonator;Low Speed Clock (LSE),Crystal/Ceramic Resonator。
45d8f897cef2d3a4ff98b1252d397e99
再次,查看手册,查看LD2的引脚。LD2引脚对应了芯片的PA5引脚。
c017480a25d2d97de887302eab86ae8f
其次,设置PA5阵脚为TIM2。PA5引脚具有丰富的复用引脚功能,如Reset_State、ADC1_INN18、ADC1_INP19、ADC2_INN18、ADC2_INP19、DAC1_OUT2、12S1_CK等。
843a18191dda44ba71c000bd3bbddc54
最后,设置编辑软件。在此次测试中使用MDK-KEIL。
3bc5690fcd7a6b52cadb9fd3d867b8f7
二、程序解读
主程序
int main(void)
{
  /* USER CODE BEGIN 1 */
  uint16_t Pwmcount=0;   //
  /* 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_ICACHE_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
  if (HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1) != HAL_OK)
  {
    /* PWM Generation Error */
Error_Handler();
  }
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  while (Pwmcount< 1000)
  {
Pwmcount++;
  __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, Pwmcount);
HAL_Delay(1);
  }
  while (Pwmcount)
  {
Pwmcount--;
  __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, Pwmcount);
HAL_Delay(1);
  }
HAL_Delay(1);
  }
  /* USER CODE END 3 */
}

程序解读
1. 变量声明与初始化
uint16_t Pwmcount=0;\\Pwmcount用于存储当前的PWM占空比。
2. 初始化与配置
HAL_Init();\\配置SysTick定时器。
SystemClock_Config();\\配置系统时钟
MX_GPIO_Init();\\初始化GPIO引脚
MX_ICACHE_Init();\\初始化指令缓存(ICACHE)
MX_TIM2_Init();\\初始化定时器TIM2

3. 启动PWM
if (HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1) != HAL_OK)\\ 启动TIM2的PWM输出,指定通道为TIM_CHANNEL_1。
{
Error_Handler();\\处理错误
}

4. 主循环
while (1)
{
    while (Pwmcount < 1000) \\增加PWM占空比,直到达到最大值1000。
    {
Pwmcount++;
        __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, Pwmcount); \\控制PWM输出的占空比
HAL_Delay(1);
    }
    while (Pwmcount)
    {
Pwmcount--;
        __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, Pwmcount);
HAL_Delay(1);\\延迟1毫秒
    }
HAL_Delay(1);
}
三、效果
031aa07247e5f526d03f2ac31ebe37b6 142889ac62dbb43d348c1529d6d8bfa5 0310fd28da26770cdccab880a4ab00a1 e1fb6f5bce6f4291db8386a9ecd5d87e

菜鸟的第一步 发表于 2024-8-16 14:44 | 显示全部楼层
实现的效果还不错
狄克爱老虎油 发表于 2024-8-17 23:01 来自手机 | 显示全部楼层
能做个动态图就更直观了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

134

主题

751

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部

134

主题

751

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部