定时器中断_PWM输出_STM32第三课
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第三课的更多相关文章
- 合宙AIR105(三): 定时器, 定时器中断和PWM输出
目录 合宙AIR105(一): Keil MDK开发环境, DAP-Link 烧录和调试 合宙AIR105(二): 时钟设置和延迟函数 合宙AIR105(三): 定时器, 定时器中断和PWM输出 Ai ...
- STC10F10XE定时器中断输出10KHz的方波程序
//咱做硬件的也动手做点测试程序,为了测试新做的电机驱动板,找了个51的板子当10K信号发生器测试IGBT开关延时时间. #include <STC_NEW_8051.H>#include ...
- 红帽学习笔记[RHCSA] 第三课[输出重定向、Vi编辑器]
第三课 关于Linux的输入输出 输入输出 0 stdin 标准输入 仅读取 1 stdout 标准输出 仅写入 2 stderr 标准错误 仅写入 3 filename 其他文件 读取和/或写入 输 ...
- STM32学习笔记——定时器中断(向原子哥学习)
定时器中断 STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器.在本章中,我们将利 ...
- 【Linux探索之旅】第四部分第三课:文件传输,潇洒同步
内容简单介绍 .第四部分第三课:文件传输.潇洒同步 2.第四部分第四课:分析网络.隔离防火 文件传输.潇洒同步 这一课的内容相对简单,所以我们慢慢享用. 经过上一课的学习.我们已经知道怎样远程连接到其 ...
- 嵌入式02 STM32 实验10 定时器中断
优秀文章 https://blog.csdn.net/qq_38351824/article/details/82619734 一.STM32通用定时器(TIM2.TIM3.TIM4和TIM5共四个通 ...
- ZYNQ入门实例——定时器中断与程序固化
一.前言 APU系统中CPU以串行执行代码的方式完成操作,软件方式很难做到精准计时,因此调用内部定时器硬件完成计时是更好的选择.本文以定时器中断方式控制LED周期性闪烁为例学习私有定时器的使用.同时学 ...
- (stm32f103学习总结)—stm32定时器中断
一.定时器介绍 STM32F1的定时器非常多,由2个基本定时器(TIM6.TIM7).4个通 用定时器(TIM2-TIM5)和2个高级定时器(TIM1.TIM8)组成.基本定 时器的功能最为简单,类似 ...
- 4-MSP430定时器_定时器中断
一开始没写好就上传了,,,,,,,,这次来个全的 自己学MSP430是为了写一篇关于PID的文章,需要430在proteus上做仿真,一则认为在自动控制算法上PID真的很经典,PLC设备上大多是模块式 ...
- stm32定时器中断类型分析
一直在用的stm32定时器的中断都是TIM_IT_Update更新中断,也没问为什么,直到碰到有人使用TIM_IT_CC1中断,才想到这定时器的中断类型究竟有什么区别,都怪当时学习stm32的时候不够 ...
随机推荐
- vue 组件之间事件触发($emit)与event Bus($on)的用法说明
组件之间事件触发 新增按钮组件: 操作按钮组合组件: 此时有个需求就是,无论是哪个按钮,如果改变了列表中的数据,列表需要实时更新数据. 此时就需要用到组件间的事件触发. 父子组件之间事件触发可以使用$ ...
- nojejs 弹出子窗口,取值后返回
1.主窗口: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...
- jquery 选择器 或 且
jquery选择器具有很强大的功能,基本的使用方法随处可见,jquery还提供了更为方便的使用. 且:$("div[id^='AAA_']div[id$='_DIV']"),此选择 ...
- ArrayList学习
核心源码 package java.util; import java.util.function.Consumer; import java.util.function.Predicate; imp ...
- app工程目录结构
一.APP工程目录结构 APP工程分为两个层次,第一个层次是项目(这里在eclipse中是指workspace),另一个层次是模块(这里在eclipse中是指project) 模块依附于项目,每个项目 ...
- 微信开发 回复用户消息 .net C#
前段时间开发了公司的微信 这里做个知识总结分享下经验,望一起学习..... 感觉后面写个系列的最好了 .... 企业需求: 给指定企业用户发送消息:如考勤信息. 企业通知.个人信息推送等等, /// ...
- uglifyjs-webpack-plugin配置
项目使用vuecli3搭建,在vue.config.js文件中进行配置,主要配置了去除线上环境的打印信息. 首先安装插件, 执行命令 npm install uglifyjs-webpack-plug ...
- angularJS依赖注入的个人理解
依赖注入:一句话 --- 没事你不要来找我,有事我会去找你. AngularJS 5个核心组件用来作为依赖注入: value factory service provider constant ...
- Redis在线安装+三种启动方式(自启配置)
1.下载 1)检查是否安装wget插件 $ wget --version 2)如未安装,使用yum进行安装 $ yum install -y wget 3)下载redis安装包 $ wge ...
- 后台运行&和nohup使用
这里首先先介绍一下 ctrl+z bg fg jobs 命令 下面为了观察效果,test1.sh脚本不停的输出hello ctrl + z ,会使一个正在运行的进程挂起(暂停)到后台,而且执行jobs ...