文章目录

  • 前言
  • 一、定时器及PWM的概述
    • 1.通用定时器
    • 2.PWM
  • 二、配置步骤及代码实现
  • 总结

前言

今天我们来进行PWM的学习,今天使用到的是通用定时器TIM14 ,在此之前我们已经简单学习过定时器的使用了,这样配置起来就会比较简单。


一、定时器及PWM的概述

1.通用定时器

TIMx主要功能通用TIMx定时器功能包括:
● 16位向上、向下、向上/向下自动装载计数器
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值
4个独立通道: ─ 输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式) ─ 单脉冲模式输出
● 使用外部信号控制定时器和定时器互连的同步电路
● 如下事件发生时产生中断/DMA: ─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ─ 输入捕获 ─ 输出比较
● 支持针对定位的增量(正交)编码器和霍尔传感器电路
● 触发输入作为外部时钟或者按周期的电流管理

其中加粗部分是我们今天需要使用到的功能,今天只使用到1路pwm。

2.PWM

如图所示:

输出1个100Hz的脉冲,设置占空比为50的话,LED灯的亮度就是直接低电平点亮的一半,我们可以通过调整脉冲的占空比来调整LED灯的亮度,使LED灯逐渐变暗再逐渐变亮不断循环来实现呼吸灯的效果

二、配置步骤及代码实现

代码如下:

#include "stm32f4xx.h"                  // Device header
#include "sys.h"                      //位带操作static GPIO_InitTypeDef  GPIO_InitStructure;
static TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
static TIM_OCInitTypeDef  TIM_OCInitStructure;void delay_ms(uint32_t n)
{while(n--){SysTick->CTRL = 0; // Disable SysTickSysTick->LOAD = (168000)-1; // Count from 255 to 0 (256 cycles)SysTick->VAL = 0; // Clear current value as well as count flagSysTick->CTRL = 5; // Enable SysTick timer with processor clockwhile ((SysTick->CTRL & 0x00010000)==0);// Wait until count flag is set}SysTick->CTRL = 0; // Disable SysTick
}void Tim14_init(void)
{//使能定时器3硬件时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE);//配置定时器3分频值、计数值TIM_TimeBaseStructure.TIM_Period = 10000/100-1;//计数值TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;//进行8400的预分频值 42*2Mhz/8400=10000hz 10000次计数就是1秒TIM_TimeBaseStructure.TIM_ClockDivision = 0;//在f407不支持,没有时钟分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数TIM_TimeBaseInit(TIM14, &TIM_TimeBaseStructure);/*通道1工作在PWM1模式下*/TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//打开脉冲输出TIM_OCInitStructure.TIM_Pulse = 80;        //比较值TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//有效状态为高电平TIM_OC1Init(TIM14, &TIM_OCInitStructure);//使能定时器3工作TIM_Cmd(TIM14, ENABLE);}int main(void)
{int16_t pwm_cmp=0;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟//GPIOF9,F10初始化设置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIO_SetBits(GPIOF,GPIO_Pin_9);GPIO_PinAFConfig(GPIOF, GPIO_PinSource9, GPIO_AF_TIM14);//配置gpio为复用功能//定时器 3初始化Tim14_init();while(1){for(pwm_cmp=0;pwm_cmp<=100;pwm_cmp++){TIM_SetCompare1(TIM14,pwm_cmp);delay_ms(20);}for(pwm_cmp=100;pwm_cmp>=0;pwm_cmp--){TIM_SetCompare1(TIM14,pwm_cmp);delay_ms(20);}}
}

总结

一点一点的积累知识,学的东西多了,慢慢的发现把所学的一个功能和另一个功能组合起来就会实现一中新的效果。

基于STM32F4实现LED呼吸灯效果(PWM)相关推荐

  1. Arduino ESP32利用PWM实现板载LED呼吸灯效果

    Arduino ESP32利用PWM实现板载LED呼吸灯效果 LEDC简介 LED控制(LEDC)外围设备主要用于控制LED的强度,尽管它也可以用于生成PWM信号用于其他目的.它具有16个通道,可以生 ...

  2. STM32使用延时控制LED灯亮暗变换,LED呼吸灯效果

    STM32F407ZE 使用延时控制LED灯亮暗变换,实现LED呼吸灯效果 具体代码如下: main.c部分 #include <stm32f4xx.h> #include "s ...

  3. 单片机实现led呼吸灯效果 宏定义函数

    写了一个简单的LED呼吸灯效果代码,可作为C语言初学者for循环的练习,用宏定义方便调用. 四个变量可调亮灭时间,i大,灭的时间长: j大,灭得慢; m大,亮的时间长: n大,亮得慢. 用STM32F ...

  4. stm32呼吸灯c语言程序,STM32使用PWM控制LED呼吸灯效果

    实验的STM32型号: STM32F103C8T6   48引脚 涉及到的知识: RCC,GPIO,TIMER,PWM 设置 *RCC需打开外部时钟 *GPIO查表得知 PA3 默认复用引脚 TIM2 ...

  5. STM32F103C8T6核心开发板下,通过TIM3和TIM4输出PWM波形实现2个 LED呼吸灯的效果

    使用TIM3和TIM4,分别输出一个PWM波形,驱动一个外接的LED灯以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果 文章目录 使用TIM3和TIM4 ...

  6. 在STM上用PWM波形实现2个 LED呼吸灯

    STM32最小核心板使用TIM3和TIM4,分别输出一个PWM波形实现2个 LED呼吸灯 文章目录 STM32最小核心板使用TIM3和TIM4,分别输出一个PWM波形实现2个 LED呼吸灯 1.PWM ...

  7. STM32实现定时器和LED呼吸灯

    目录 一.实现定时器 1.定时器的介绍 1.1定时器的概念及作用 1.2定时器的分类 2.新建项目 2.1新建 2.2选择STM32F103C8T6芯片 2.3配置SYS 2.4配置RCC 2.5配置 ...

  8. 嵌入式学习——使用定时器输出PWM波形,实现 LED呼吸灯的效果

    嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 目录 嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 1. 任务要求 2 PWM波介绍, 2.1 什么是PWM(Pu ...

  9. 嵌入式——使用定时器输出PWM波形,实现 LED呼吸灯的效果

    一.实验要求: 使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼 ...

最新文章

  1. Android Handler 深入学习(1)
  2. java和python的web自动化有什么区别-python和java哪个更适合做自动化?
  3. 在linux上安装mysql5.6,在linux(Centos 7以上版本亲测)上安装mysql5.6
  4. 进程之父子进程的关系
  5. 什么意思中文翻译_os常见意思介绍
  6. node.js中对 redis 的安装和基本操作
  7. java 当前时间 15分钟_怎么用java 获取15分钟以前的时间
  8. idea常用图标总结
  9. 公司计算机程序员英语怎么说,程序员英语怎么说
  10. 代理模式---论坛权限控制代理
  11. 飞机大战小游戏 C语言(课设任务)
  12. ENSP未找到base device,是否立即注册
  13. Python 入门-Task1 变量、运算符、数据类型及位运算
  14. thinkpad e450c蓝牙重新安装后不能搜索到手机解决方案--适用大部分笔记本
  15. RPC框架原理与实现
  16. 使用 Ghidra 分析 phpStudy 后门
  17. 弧形背景html,弧形背景墙—弧形背景墙相关知识介绍
  18. 如何寻找省级软件产业主管部门认可的软件检测机构出具报告
  19. learnOpenCv】Facial Landmark Detection:人脸特征点检测的一些应用
  20. java emoji问号_java过滤emoji字符

热门文章

  1. 网络攻击与防御技术第一次试验
  2. 股票数据量化交易接口是什么?
  3. 计算机信息处理的特点友善的人机界面,(信息技术基础测试题及参考答案.doc
  4. AT89C51单片机
  5. 今天晚上一起到外面吃饭
  6. 深入解析Spark中的RPC
  7. 为什么开发人员需要代码签名证书来保护源代码?
  8. android 通讯录 首字母索引,android仿微信通讯录搜索(匹配拼音,字母,索引位置标记颜色)...
  9. Java基础知识体系_计算机与java
  10. 谁说0基础参加北京培训不能成为UI设计师