极客秀
搜索

基于HAL库和CubeMX的STM32 PWM波控制灯的亮暗。

点灯~可以说是每一个入行的朋友第一个要学的东西,流水灯,呼吸灯,律动灯各种各样的点灯折磨着新手。
控制灯的亮灭通常用两种方式,一种是利用DAC输出可调的电压,另一种则是 利用PWM波调节方波的占空比来实现灯的亮暗
,本期我们就使用STM32来实现输出PWM波使LED灯的亮度发生变换。

打开CubeMX,创建新的工程,选择我们的板子芯片型号。

将连接LED的IO设置为PWM模式,如果没有PWM模式,我们也可以通过定时器来模拟PWM模式。

配置好高速时钟和低速时钟(根据自己的板子来配置)

配置好时钟树。

定时器打开PWM模式

配置相关参数,时钟频率/(分频系数+1)就是定时器的一秒计数,到达重装载值的时候就会触发定时器中断,当我们选择模式一的时候,当计数值高于Pulse比较值是有效电平,有效电平由CH
Polarity决定。
因此当我们希望输出1KHZ的方波的时候,就可以设置分频系数为167,计数值为1000,设置Pulse为500,即为占空比50%。

接着设置工程的基本信息,使用MDK编程。

分离.C和.H文件,之后创建工程。

接着在主程序中写上启动PWM的函数。

也可以利用这个函数来改变PWM的占空比。


  while (1)  {    /* USER CODE END WHILE */    for(int i = 0;i<1000;i++)    {      __HAL_TIM_SET_COMPARE(&htim14,TIM_CHANNEL_1,i);      HAL_Delay(1);    }    for(int i = 1000;i>0;i--)    {      __HAL_TIM_SET_COMPARE(&htim14,TIM_CHANNEL_1,i);      HAL_Delay(1);    }        /* USER CODE BEGIN 3 */  }

利用上述代码,改变PWM的占空比即可实现呼吸灯。
** 效果展示 ** 当然有可能我们的IO没有PWM模式,我们也可以通过定时器来实现PWM模式。 首先是随便设置一个定时器。

打开定时器中断。 之后创建我们的工程,在初始化中开启定时器中断。

HAL_TIM_Base_Start_IT(&htim1);

然后编写对应的中断回调函数,在中断回调函数中我们模拟PWM波的实现。


int number = 0;int Pulse = 50;//初始的Pulse为50则为占空比50%void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){    if (htim->Instance == TIM1)    {        number ++;        if(number 》100)        {          number = 0;        }        if(number<Pulse)        {          HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,0);        }        else        {          HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,1);        }    }}

在循环函数中添加呼吸灯的实现。


  while (1)  {    /* USER CODE END WHILE */  
    /* USER CODE BEGIN 3 */    for(int i = 0;i<100;i++)    {        Pulse = i;      HAL_Delay(10);    }    for(int i = 100;i>0;i--)    {        Pulse = i;      HAL_Delay(10);    }      }

效果展示 ** 下期介绍串口的重定向 **

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容