STM32学习和实践笔记(24):PWM输出实验:呼吸灯

2024-05-03 21:28

本文主要是介绍STM32学习和实践笔记(24):PWM输出实验:呼吸灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本实验所要实现的功能是:通过TIM3的CH1输出一个PWM信号,控制D7指示

灯由暗变亮,再由亮变暗,类似于人的呼吸。程序框架如下

1)初始化PC6管脚为PWM输出功能

2)PWM输出控制程序

本实验的硬件电路非常简单,只使用到开发板上的LED(D7),因为D7指

示灯接在PC6管脚,而通过对TIM3_CH1复用功能完全重映射就可以映射到

PC6脚。所以可以通过TIM3的CH1输出PWM信号,实现D7指示灯呼吸灯的控

制。

main.c

#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "pwm.h"/*	通过TIM3的CH1输出一个PWM信号,控制D7指示灯由暗变亮,再由亮变暗,类似于人的呼吸。程序框架如下:(1)初始化PC6管脚为PWM输出功能(2)PWM输出控制程序
*/int main()
{u16 i=0;u8 fx=0;SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组LED_Init();TIM3_CH1_PWM_Init(500,72-1);//PWM频率设为2KHZwhile(1){if(fx==0){i++;if(i==300){fx=1;}}else{i--;if(i==0){fx=0;}}TIM_SetCompare1(TIM3, i); //修改TIMx_CCRx的值控制占空比delay_ms(100);}
}

pwm.c

#include "pwm.h"
#include "led.h"void TIM3_CH1_PWM_Init(u16 period,u16 prescaler)
{GPIO_InitTypeDef GPIO_InitStructure; //为将PC6引脚初始化而声明的结构体变量TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//定时器初始化的结构体变量声明TIM_OCInitTypeDef TIM_OCInitStructure; //初始化PWM输出各参数的结构体变量声明 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能TIM3时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PC端口的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能AFIO时钟以便进行端口映射GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6; //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;// PC6为复用功能输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	//GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//将通用定时器3的通道1的输出从PA6引脚重映射到PC6引脚TIM_TimeBaseInitStructure.TIM_Period=period;   //装入函数传过来的自动装载值TIM_TimeBaseInitStructure.TIM_Prescaler=prescaler; //装入函数传过来的分频系数TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//1分频(没有分频)TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式:从0开始计数到自动重载值后溢出产生中断TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3各参数:自动重装值、分频系统、计数方式等TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_Low;TIM_OCInitStructure.TIM_OutputState =	TIM_OutputState_Enable;TIM_OC1Init(TIM3,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能TIMx在CCRx上的预装载寄存器TIM_ARRPreloadConfig(TIM3, ENABLE);//使能 TIMx 在 ARR 上的预装载寄存器允许位TIM_Cmd(TIM3, ENABLE);//开启定时器}

pwm.h

#ifndef _pwm_H
#define _pwm_H#include "system.h"void TIM3_CH1_PWM_Init(u16 period,u16 prescaler);#endif

实际在开发板上测试,因为开发板上不是接的LED,而是接到一个数码管的一段,呼吸灯的效果不明显。

改为下述参数后,呼吸灯的效果就很明显了。

这篇关于STM32学习和实践笔记(24):PWM输出实验:呼吸灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957679

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx