首页 > 其他分享 >【STM32+HAL库】使用通用定时器生成的PWM实现呼吸灯效果

【STM32+HAL库】使用通用定时器生成的PWM实现呼吸灯效果

时间:2024-10-27 15:32:05浏览次数:1  
标签:BEGIN CODE HAL STM32 USER END PWM

板子:STM32F103C8
仿真软件:Proteus 8
软件平台:cubemx+keil

1 新建STM32CubeMX工程

1.1 配置系统时钟RCC

 

 

1.2 配置定时器

这里用的PB3和PA15一对

TIM2中,时钟源选择内部时钟Internal Clock,通道1选择PWM输出PWM Generation CH1 通道2选择PWM输出PWM Generation CH2

 

 

2 代码

2.1 定义变量

uint16_t pulse=0;   /*占空比,重装载值设置为999*/
uint8_t flag=1;     /*LED标志位,用于判断是渐亮还是渐灭*/

2.2 mian函数

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 */
    //启动定时器2通道1的PWM
    HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
    //启动定时器2通道2的PWM
    HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
    
    uint16_t pulse=0;   /*占空比,重装载值设置为999*/
    uint8_t flag=1;     /*LED标志位,用于判断是渐亮还是渐灭*/

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */

这里下面是while 没复制 就复制到这

while中代码编写

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
            if (flag==1)    /*执行LED渐亮*/
    {
      if (pulse<1000)
      {
        pulse+=50;   /*占空比增大*/
        __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,pulse);    /*修改占空比*/
        HAL_Delay(100);
      }
      else
        flag=0;    /*切换为渐灭模式*/
    }
    else       /*执行LED渐灭*/
    {
      pulse-=50;    /*占空比减小*/
      __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,pulse);    /*修改占空比*/
      HAL_Delay(100);
      if (pulse==0)
      {
        flag=1;    /*切换为渐亮模式*/
      }
    }
  }

完事

 

标签:BEGIN,CODE,HAL,STM32,USER,END,PWM
From: https://www.cnblogs.com/hack747/p/18508491

相关文章

  • 【STM32 Blue Pill编程实例】-控制步进电机(ULN2003+28BYJ-48)
    控制步进电机(ULN2003+28BYJ-48)文章目录控制步进电机(ULN2003+28BYJ-48)1、步进电机介绍2、ULN2003步进电机驱动模块3、硬件准备及接线4、模块配置3.1定时器配置3.2ULN2003输入引脚配置4、代码实现在本文中,我们将介使用STM32CubeIDE使用ULN2......
  • STM32--I2C外设
    前文说到了12C的协议规定和通信意义,并且也用GPIO口模拟的I2C,实现了读写MPU6050的程序,在这个过程中可以发现,通信协议的时序是一个很重要的东西,只要理解清楚了这个时序的意,就可以按照协议的规定,去翻转通信引脚的高低电平,只要翻转产生的这个时序波形,满足了通信协议的规定,那通信双......
  • STM32--I2C通信
    对于I2C通信会分为两大块来讲解,第一块,就是介绍协议规则,然后用软件模拟的形式来实现协议,第二块,就是介绍STM32的12C外设,然后用硬件来实现协议,因为12C是同步时序,软件模拟协议也非常方便。在学12C之前,我们已经学习了串口通信,串口通信,就是从TX引脚向RX引脚发送数据流,数据流......
  • CLion中使用add_subdirectory()模块化管理Stm32项目
    背景文章目录背景配置参考源码在Clion中使用STM32的时候,通常把自己开发的内容写在User目录中,然而需要将User目录下的源文件和头文件都添加到生成的CMakeLits.txt中。对于不同风格的库,直接在生成的CMakeLists.txt中添加资源会显得有些乱,可以使用cmake的**子目录(s......
  • STM32F7xx移植LVGL记录
    1简介项目中要用到屏幕,也是工作多年首次进行彩屏的开发。之前的项目大多是不需要用户界面的,或者是单色屏。GUI的开发,也就是使用过u8g2,这是个不熟悉的领域。但是也一直想要尝试彩屏的,这就有了机会。STM32就不多说了。简单说一下LVGL,在这之前也是听过LVGL这个开源图形库的鼎鼎大......
  • Halcon图像颜色通道拆分合并与四则运算
    读取图像并标注目标点灰度值,为后续对比做准备read_image(Image,'E:/Halcon/图片/880720666518444692.jpg')dev_set_draw('margin')dev_set_color('green')dev_get_window(WindowHandle)query_font(WindowHandle,Font)FontWithSize:=Font[0]+'-40&......
  • STM32,堆栈,RAM,FLASH
    收藏评论0刚拿到STM32时,你只编写一个死循环编译后,就会发现这么个程序已用了1600多的RAM,这要是在51单片机上,会心疼死了,这1600多的RAM跑哪儿去了,分析.map文件,你会发现是堆和栈占用的在startup_stm32f10x_md.s文件中,它的前面几行就有以下定义:这下明白了吧,STM32在启动......
  • STM32CubeMX下载芯片固件库失败
    1.错误截图使用STM32CubeMX下载STM32H7R固件失败如下所示:Forunavailablefiles,youcandownloadthemmanuallywiththe"FromLocalbutton"实际图片如下所示出现这个问题的时候,STM32CubeMX的软件重新卸载和安装过,但是均无效。网络也更换过,也无效,所以只有通过错误的......
  • STM32:GPIO
    目录一、简介二、结构三、功能        1.GPIO        2.外部中断四、示例 一、简介    输入输出(IO)是单片机最基本的外设功能之一。根据型号不同,STM32的IO端口数量不同,如64引脚的STM32F103RBT6有A、B、C、D四个IO端口,每个端口有16个引脚。......
  • floyd-warshall算法
    Floyd-warshall算法问题描述图的最短路径问题,多源最短路径问题求解算法思路设Dijk为从i到j的只以(1...k)集合为中间节点的最短路径的长度,Dijk=min(Dijk-1,Dikk-1+Dkjk-1)若最短路径经过点k,则Dijk=Dikk-1+Dkjk-1;若最短路径不经过点k,则Dijk=Dijk-1python......