找回密码
 立即注册
搜索
0赞
赞赏
手机版
扫码打开手机版
把文字装进口袋

STM32CubeMX之定时器PWM输出

魏群1 2022-8-4 10:54:55
   脉冲宽度调制模式(PWM)可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。
  本示例实现 IO 输出模式–PWM 波形输出。 以 LED 驱动为例, 使用定时器高级功能(PWM 模式), 实现呼吸灯效果。
        1.硬件接口

          本硬件平台有3个LED灯分别为LED2、LED3、LED4LED2接PA1,LED2接PB8,LED4接PB9,硬件原理图如下:
       
           根据STM32引脚定义手册或者STM32CUbeMX软件我们可得知定时器4的CH1和CH2对应外部引脚PB8和PB9。
        2 软件设计

          打开STM32CubeMX工具,配置定时器4,将PB8配置为定时器4通道3(复用推挽输出),PB9配置为定时器4通道4(复用推挽输出)。
        3.参数说明

                                        模式                                        说明
                                        Input capture direct mode                                        输入捕获直接模式
                                        Input capture indirectmode                                        输入捕获间接模式
                                        Input capture triggered by TRC                                        输入捕获触发器模式
                                        Output compare no output                                        输出比较(冻结模式000 )
                                        Output compare CH3                                        输出比较(001)
                                        PWM Generation No output                                        PWM产生无输出
                                        PWM Generation CH3                                        PWM输出到CH3
                                        CH3 Combined channels                                        联合通道
                                        xor activation                                        定时器输入异或模式
        4. 代码生成

        PWM模式配置:
        PB8、PB9引脚配置和PWM模式使能
  1. HAL_TIM_PWM_Start(timHandle,TIM_CHANNEL_3);//初始化通道3
  2. HAL_TIM_PWM_Start(timHandle,TIM_CHANNEL_4);//初始化通道4
复制代码
引脚模式配置及PWM初始化
        4.呼吸灯主函数示例
  1. while (1)
  2.   {
  3.     /* USER CODE END WHILE */
  4.     /* USER CODE BEGIN 3 */
  5.                 /*实现呼吸灯*/
  6.                 if(flag==0)i++;
  7.                 else i--;
  8.                 if(i>=300)flag=1;
  9.                 if(i==0)flag=0;
  10.                 HAL_Delay(3);
  11.                 htim4.Instance->CCR3=i;//调节占空比
  12.                 htim4.Instance->CCR4=i;
  13.   }
复制代码
        5.HAL库定时器常用函数介绍

           HAL库中定时器基本功能函数源码均在stm32f1xx_hal_tim.c中,高级功能函数在stm32f1xx_hal_tim_ex.c中,本小节主要介绍几个常用函数。(以下列举函数可能需要用户调用或修改)。
  1. /*硬件层初始化:时钟、中断,DMA*/
  2. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim);
  3. /*中断方式开启定时器*/
  4. HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
  5. /*DMA方式开启定时器*/
  6. HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);
  7. /*开启定时器PWM模式*/
  8. HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
  9. /*获取状态*/
  10. HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim);
  11. /*中断方式开启定时器输入捕获功能*/
  12. HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
复制代码
        6.软件仿真效果展示

          通过KEIL软件仿真,查看引脚电平变化,KEIL软件相关设置:
        CPU DLL:SARMCM3.DLL
        Dialog DLL:DARMSTM.DLL Parameter:-pSTM32F103C8
        进入仿真模式:
       
        查看引脚电平变化波形:
        波形效果:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

使用道具 举报

您需要登录后才可以回帖 立即登录
顶起  很好的帖
2022-8-5 02:30:36
我表示压力很大
2022-8-5 18:06:16
还是看不懂,复杂
2022-8-7 00:31:46
学习了,这就去试试
2022-8-8 06:57:16
不错
2022-8-8 12:13:13
太赞了
2022-8-9 14:36:43
支持!!!!!!
2022-8-11 03:53:19
很不错的哦,支持,加油
2022-8-12 17:09:54
2022-8-17 18:16:00
1234下一页
返回顶部