1、TIM2中断,需求:实现LED间隔0.5秒闪烁

1、使用CubeMX设置系统时钟、RCC、LED灯、时钟树等基础操作。

2、配置TIMER2,使能为全局变量,设置优先级。并生成代码。

3、代码编写

main.c中开启timer2中断

/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);
/* USER CODE END 2 */

打开HAL_TIM_Base_Start_IT(&htim2);的实现代码,下图可以看到最终调用 HAL_TIM_PeriodElapsedCallback(htim);

继续查看HAL_TIM_PeriodElapsedCallback(htim)实现代码,发现是一个弱函数,需要用户实现。

那么在tim.c中重写HAL_TIM_PeriodElapsedCallback(htim),当发生回调函数时,翻转LED状态。

/* USER CODE BEGIN 1 */
//发生回调函数时,翻转LED
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if(htim==&htim2){
HAL_GPIO_TogglePin(REDLED_GPIO_Port, REDLED_Pin);
}
}
/* USER CODE END 1 */

2、PWM输出LED呼吸灯,需求:LED呼吸灯

PWM即脉冲宽度调制。当LED快速闪烁人眼无法识别时,亮度会介入最亮和熄灭之间。

比较值x=t/T,当x在(0,重装载值)之间线性增加或线性减少时,就会呈现亮度线性增加或减少。

查原理图可知,PB5需要设置为TIM3第二通道,在Tim3 GPIO settings 设置

main.c文件

/* USER CODE BEGIN PV */
uint16_t pwm_value = 0;
/* USER CODE END PV */ /* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
/* USER CODE END 2 */ void main(){
while (1) {
while (pwm_value < 500) {
pwm_value++;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, pwm_value); //修改比较值,修改占空比
HAL_Delay(1);
}
while (pwm_value) {
pwm_value--;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, pwm_value); //修改比较值,修改占空比
HAL_Delay(1);
}
HAL_Delay(200);
}
}

定时器中断_PWM输出_STM32第三课的更多相关文章

  1. 合宙AIR105(三): 定时器, 定时器中断和PWM输出

    目录 合宙AIR105(一): Keil MDK开发环境, DAP-Link 烧录和调试 合宙AIR105(二): 时钟设置和延迟函数 合宙AIR105(三): 定时器, 定时器中断和PWM输出 Ai ...

  2. STC10F10XE定时器中断输出10KHz的方波程序

    //咱做硬件的也动手做点测试程序,为了测试新做的电机驱动板,找了个51的板子当10K信号发生器测试IGBT开关延时时间. #include <STC_NEW_8051.H>#include ...

  3. 红帽学习笔记[RHCSA] 第三课[输出重定向、Vi编辑器]

    第三课 关于Linux的输入输出 输入输出 0 stdin 标准输入 仅读取 1 stdout 标准输出 仅写入 2 stderr 标准错误 仅写入 3 filename 其他文件 读取和/或写入 输 ...

  4. STM32学习笔记——定时器中断(向原子哥学习)

    定时器中断 STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器.在本章中,我们将利 ...

  5. 【Linux探索之旅】第四部分第三课:文件传输,潇洒同步

    内容简单介绍 .第四部分第三课:文件传输.潇洒同步 2.第四部分第四课:分析网络.隔离防火 文件传输.潇洒同步 这一课的内容相对简单,所以我们慢慢享用. 经过上一课的学习.我们已经知道怎样远程连接到其 ...

  6. 嵌入式02 STM32 实验10 定时器中断

    优秀文章 https://blog.csdn.net/qq_38351824/article/details/82619734 一.STM32通用定时器(TIM2.TIM3.TIM4和TIM5共四个通 ...

  7. ZYNQ入门实例——定时器中断与程序固化

    一.前言 APU系统中CPU以串行执行代码的方式完成操作,软件方式很难做到精准计时,因此调用内部定时器硬件完成计时是更好的选择.本文以定时器中断方式控制LED周期性闪烁为例学习私有定时器的使用.同时学 ...

  8. (stm32f103学习总结)—stm32定时器中断

    一.定时器介绍 STM32F1的定时器非常多,由2个基本定时器(TIM6.TIM7).4个通 用定时器(TIM2-TIM5)和2个高级定时器(TIM1.TIM8)组成.基本定 时器的功能最为简单,类似 ...

  9. 4-MSP430定时器_定时器中断

    一开始没写好就上传了,,,,,,,,这次来个全的 自己学MSP430是为了写一篇关于PID的文章,需要430在proteus上做仿真,一则认为在自动控制算法上PID真的很经典,PLC设备上大多是模块式 ...

  10. stm32定时器中断类型分析

    一直在用的stm32定时器的中断都是TIM_IT_Update更新中断,也没问为什么,直到碰到有人使用TIM_IT_CC1中断,才想到这定时器的中断类型究竟有什么区别,都怪当时学习stm32的时候不够 ...

随机推荐

  1. .netCore Nuget包引用记录

    1.画图  System.Drawing.Common 2.

  2. 狂神的学习笔记demo11(包机制)

    无法生成子包的问题:设置图标里的Compact Middle Packages勾去掉 //定义包 package package com.panda.base1; //导入包import import ...

  3. Js 代码递归实现树形数据与数组相互转换。

    贴代码: // Grid->Tree 结构组装. var tree = []; this.setTreeData(table, tree, ""); //组装树形 setTr ...

  4. DevExpress 模块注入框架

    参考地址 模块注入框架(MIF)是一组帮助MVVM应用程序的类.它提供以下功能 将ViewModel连接到视图 页面之间导航 保存和恢复应用程序的可视和逻辑状态 单元测试 模块 模块是应用程序的功能单 ...

  5. C# .netCore 上传文件到ftps/ftp

    白码一号的博客园 最近由于项目安全需要,将之前的ftp上传文件的方式,改用ftps 因为不太了解这个东西便开始了踩坑之旅 首先,最近在ubuntu 上搭建了这个服务 流程可以参考这些博客(部署网上的资 ...

  6. JSTL练习

    求:request 域中有一个存有 user 对象的 ist 集合.需要使用 jstltel 将 list 集合故据展示到 jsp 页面的表格 table表格中 List list = new Arr ...

  7. 将成员服务器ms1加到AD域中

    1.对ms1的ipv4设置,dns对应地址dc1服务器地址 2.修改计算机名,并加入域 重启后 2.以域用户登录方式有两种 1.  2. 检查ms1有没有加入dc1的域中 在dc1

  8. Executors.newScheduledThreadPool()定时任务线程池

    定时任务线程池是由 Timer 进化而来 jdk中的计划任务 Timer 工具类提供了以计时器或计划任务的功能来实现按指定时间或时间间隔执行任务,但由于 Timer 工具类并不是以池 pool ,而是 ...

  9. k8s namespace kubeDNS

    图中kube-dns只是一个service,但是他对外提供k8s集群内部的dns服务,真正的dns server,是 coredns这几个pod k8s namespace 的作用只是提供逻辑上的组件 ...

  10. CSS函数var

    /*全局变量保存的地方*/ :root { --main-bg-color: red; /* 变量名必须以--开头 */ } var(custom-property-name, value) 值 描述 ...