打印
[STM32H5]

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

[复制链接]
620|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xu@xupt|  楼主 | 2024-8-15 00:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xu@xupt 于 2024-8-15 21:27 编辑

一、配置
首先,搜索STM32H533RE。基于STM32CubeMX,选择开发板对应的芯片型号。

其次,选择不适用TrustZone。开发板具有TrustZone能力,可以选择是否使用TrustZone。

再次,配置RCC。High Speed Clock (HSE),Crystal/Ceramic Resonator;Low Speed Clock (LSE),Crystal/Ceramic Resonator。

再次,查看手册,查看LD2的引脚。LD2引脚对应了芯片的PA5引脚。

其次,设置PA5阵脚为TIM2。PA5引脚具有丰富的复用引脚功能,如Reset_State、ADC1_INN18、ADC1_INP19、ADC2_INN18、ADC2_INP19、DAC1_OUT2、12S1_CK等。

最后,设置编辑软件。在此次测试中使用MDK-KEIL。

二、程序解读
主程序
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);
}
三、效果


使用特权

评论回复
沙发
菜鸟的第一步| | 2024-8-16 14:44 | 只看该作者
实现的效果还不错

使用特权

评论回复
板凳
狄克爱老虎油| | 2024-8-17 23:01 | 只看该作者
能做个动态图就更直观了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

110

主题

683

帖子

2

粉丝