STM32学习日记--Day3--PWM驱动LED灯

2023-11-06

PWM基本结构:

 主函数:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"

uint8_t i;

int main(void)
{
	OLED_Init();
	PWM_Init();
	
	while (1)
	{
		for (i = 0; i <= 100; i++)
		{
			PWM_SetCompare1(i);
			Delay_ms(10);
		}
		for (i = 0; i <= 100; i++)
		{
			PWM_SetCompare1(100 - i);
			Delay_ms(10);
		}
	}
}

PWM: 

#include "stm32f10x.h"                  // Device header

void PWM_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	//下面代码用来设置引脚重映射
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//首先开启AFIO
//	GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE);//设置重映射
//	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//如果该引脚有调试功能还需要调用这段代码
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//必须选用复用推挽输出,这样PWM的波形才能通过引脚输出,GPIO_Mode_AF_PP 中的 AF 表示复用功能,PP 表示推挽输出模式。推挽输出模式是指引脚既能提供高电平输出,也能提供低电平输出,适用于驱动负载电流的应用。通过将 GPIO 引脚配置为GPIO_Mode_AF_PP 模式,可以将该引脚与特定的外设功能进行关联,并使用推挽输出模式驱动外设或其他电路。
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;		//GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	TIM_InternalClockConfig(TIM2);//将定时器配置为使用内部时钟作为时钟源
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;		//ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1;		//PSC
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	//用于配置定时器的输出比较通道(Output Compare)的参数
	TIM_OCInitTypeDef TIM_OCInitStructure;
	TIM_OCStructInit(&TIM_OCInitStructure);//给结构体附初始值,如果调用类似TIM1高级定时器,就会用到一些我们没有赋值的属性,会导致出现一些bug,因此为了方便程序的修改移植,需加上初始化函数
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//设置PWM的比较模式
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//极性选择
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出使能
	TIM_OCInitStructure.TIM_Pulse = 0;		//CCR值
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);
	
	TIM_Cmd(TIM2, ENABLE);//开启时钟
}

void PWM_SetCompare1(uint16_t Compare)
{
	TIM_SetCompare1(TIM2, Compare);//直接设置定时器CCR值
}

注意:

 正常来说引脚的输出控制是由输出数据寄存器进行控制的,为了让内部时钟控制输出,需要设置为复用推挽输出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32学习日记--Day3--PWM驱动LED灯 的相关文章

  • 关于删除redis缓存

    验证环境的redis有三个节点 你必须三个节点的缓存数据都删掉 删掉之后记得要到系统工具里面刷新缓存 别单词地就是删了缓存就不管了 CROSSSLOT Keys in request don t hash to the same slot这

随机推荐

  • 可以赚钱的网络游戏?这六款也许有你想要的!

    随着人们生活水平的提高 娱乐方式也趋向多样化 而网络游戏已经成为当代人生活中不或缺的娱乐项目之一 所谓人生如戏 现实生活中 我们总是受各种因素的约束 没有办法得到释放 而网络游戏却开启了我们的第二人生 很多在现实中无法实现的梦想 我们都可以
  • 学习笔记--配置DHCP服务器(基于接口的地址池)

    一 开启DHCP功能 并且把相应端口加入VLAN 并且设置vlan网关1 开启dhcp功能 Huawei dhcp enable 2 创建vlan 10 20 Huawei vlan batch 10 20 3 把g0 0 1 跟g0 0
  • 分组转发算法

    1 首先从IP数据报首部提取出目的主机的IP地址D 得出其所在的网络N 2 若N就是与此路由器直接相连的某个网络 则进行直接交付 不需要经过其它的路由器 进行转发 直接把数据报交付给目的主机 否则就执行 3 3 若路由表中有目的地址为D的特
  • torch包下载和安装失败的解决

    今天打算使用python的 torch包的时候 输入pip install torch 在pycharm下载一直失败 报错信息里面提示一开始是pip版本出错 WARNING You are using pip version 20 0 2
  • ora-30926:无法在源表中获得一组稳定的行

    解决办法 原表的数据保证唯一 可以distinct
  • dll、so库转Java代码

    dll so库转Java代码 下载jar JNA代码生成 参数说明 生成的maven项目代码结构如下 众所周知 java程序如果要调用动态库 so dll 的函数 最传统方式是使用JNI技术 用JNI写java调用接口代码是非常痛苦的 调试
  • 538.把二叉搜素树转换为累加树

    538 把二叉搜索树转换为累加树 题干描述 解题思路 递归 1 递归函数参数以及返回值 2 确定终止条件 3 确定单层递归的逻辑 迭代 代码实现 递归法 迭代法 题干描述 力扣入口 给出二叉搜索树的根节点 该树的节点值各不相同 请你将其转换
  • 13智慧农业

    一张图读懂一个产业之智慧农业 一般认为 智慧农业指的是利用物联网 人工智能 大数据等现代信息技术与农业进行深度融合 实现农业生产全过程的信息感知 精准管理和智能控制的一种全新的农业生产方式 可实现农业可视化诊断 远程控制以及灾害预警等功能
  • 时序预测:使用MATLAB实现时间序列回归中的偏差估计

    时序预测 使用MATLAB实现时间序列回归中的偏差估计 时间序列数据分析是指对某个时间段内连续的数据进行建模和预测的过程 在时间序列分析中 通常需要进行时序预测 即预测未来的数据值 时间序列回归是一种在保持时间序列结构的同时 通过相关数据来
  • 性能测试项目实战:应用加载慢该怎么办?

    一 背景 app收到留学push 课堂 资讯 用户点击push消息 进入app 应用加载很慢 容易出现应用假死 app崩溃或提示网络异常等信息 给用户体验十分不友好 监控阿里云资源tcp连接数飙高 cpu打满 自愈能力 系统恢复能力 低 二
  • taro + linaria styled 报错 Property ‘__linaria‘ is missing

    更新 下面的解决方案不好 估计暂时不支持 我先用css 功能 报错信息 FileDescription Author 刘凯 Date 2021 04 26 08 53 19 LastEditors 刘凯 LastEditTime 2021
  • C++对于const重铸,在结构体中的const引用通过const_cast转换值

    include
  • 在VS中安装Qt插件(配置Qt环境)

    1 下载Qt的插件 Qt插件的网址 http download qt io archive 2 将Qt插件安装到vs上 下载完毕后会得到后缀名为 vsix 的工具 直接运行这个插件 前提是你电脑上已经安装了vs 安装过程等待 安装成功 3
  • 2019南科大计算机系夏令营笔试&面试

    2019南科大计算机系夏令营笔试 面试 笔试 笔试时间2个小时 卷面总分200分 其中操作系统50分 数据结构50分 离散数学50分 计算机网络50分 操作系统为中文题目 其余均为英文题目 操作系统考察进程相关知识占比很大 如进程执行时间
  • oauth2.0的配置信息AuthorizationServerConfigurerAdapter

    继承AuthorizationServerConfigurerAdapter方法的配置 Configuration EnableAuthorizationServer public class Oauth2ServerConfig exte
  • 求解矩阵最小路径和(详细分析)

    求解矩阵最小路径和 给定一个m行n列的矩阵 从左上角开始每次只能向右或者向下移动 最后到达右下角的位置 路径上的所有数字累加起来作为这条路径的路径和 如下面一个4行4列的矩阵 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0
  • Flutter插件开发集成aar包出现:Could not determine the dependencies of task ':flutter_vpn:compileDebugAidl'.问题

    概述 最近在做一个Flutter的插件开发 需要在android及ios原生中集成sdk 然后Flutter通过插件调用sdk的方法 这其中涉及到aar包的集成 虽然是Flutter的插件开发 但是关于android原生的aar包集成还是差
  • 网络--tcp协议中控制位

    网络层中的tcp协议 首先看一下tcp的报头信息 其中其余的好理解 但是它是拥有了6个控制位的 说明了此次报文段的性质 紧急URG URGent 当URG等于1时 表明紧急指针字段有效 它告诉系统此报文段中有紧急数据 应尽快传送 相当于高优
  • MySQL 索引 详解(保姆级教程)

    一 索引概述 索引是帮助 MySQL 高效获取数据的数据结构 有序 在数据之外 数据库系统还维护着满足特定查找算法的数据结构 这些数据结构以某种方式引用 指向 数据 这样就可以在这些数据结构上实现高级查询算法 这种数据结构就是索引 二 索引
  • STM32学习日记--Day3--PWM驱动LED灯

    PWM基本结构 主函数 include stm32f10x h Device header include Delay h include OLED h include PWM h uint8 t i int main void OLED