STM32F10X单片机学习之PWM.C代码注解

2023-11-11

#include "stm32f10x.h"                  // Device header

void PWM_Init(void)
{

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

 //开启 APB1 外设总线上的外设时钟,RCCAPB1Periph_TIM2 表示要开启 TIM2 的时钟,ENABLE 表示要开启时钟。
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);               

//开启 APB2 外设总线上的外设时钟,RCCAPB2Periph_GPIOA 表示要开启 GPIOA 的时钟,ENABLE 表示要开启时钟。

    GPIO_InitTypeDef GPIO_InitStructure;                                           

//声明了一个名为 GPIOInitStructure 的 GPIO_InitTypeDef 结构体变量,用于配置 GPIO 的各种参数,包括模式、引脚、频率等。
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                             

//将 GPIOA 的第1个引脚设置为复用推挽输出模式,即该引脚可以被其他外设或者功能复用,并且是推挽输出模式。
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                                                             

// 设置要初始化的引脚,这里是 GPIOA 的第1个引脚。
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                                   

 //设置该引脚的输出频率为50MHz。
    GPIO_Init(GPIOA, &GPIO_InitStructure);                                                                               

//将配置好的 GPIO_InitStructure 结构体应用到 GPIOA 的对应引脚上,从而完成 GPIOA 引脚的初始化。

    TIM_InternalClockConfig(TIM2);                                                                                               

//配置 TIM2 的计数器时钟源为内部时钟,即 APB1 时钟。这里没有指定具体的计数器时钟频率,所以默认使用的是 APB1 时钟频率,一般为 CPU 主频(如常见的 72MHz)。

    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;                                                       

 //声明一个名为 TIMTimeBaseInitStructure 的 TIMTimeBaseInitTypeDef 结构体变量,用于配置 TIM2 的各种参数,包括计数模式、溢出周期、分频器等。
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;                                     

//设置计数器时钟分割(即分频器)系数为 1,即不分频。
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;                           

//设置 TIM2 的计数模式为向上计数模式,即计数器从 0 开始递增,当计数器达到设定的溢出周期后自动清零,并发出中断或者触发其他事件。
    TIM_TimeBaseInitStructure.TIM_Period = 20000 - 1;                                                   

//设置 TIM2 的溢出周期为 20000-1,即当计数器计数到 20000 时发生更新事件,同时计数器清零重新开始计数。
    TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;                                                             

 //设置 TIM2 的分频器系数为 72-1,即计数器时钟频率为 APB1 时钟频率除以 72。这里使用了上面提到的分频系数 1 和主频为 72MHz 的情况下,所得到的计数器时钟频率为 1MHz。
    TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;                   

//TIMRepetitionCounter 变量没有实际用途,只是一个保留字段。明确将 TIM2 的 TIM_RepetitionCounter 值设置为 0,即使其无效化,避免误用。
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);                                                       

//将配置好的 TIM_TimeBaseInitStructure 结构体应用到 TIM2 上,从而完成对 TIM2 的基本配置。

    TIM_OCInitTypeDef TIM_OCInitStructure;                                                                             

 //声明一个名为 TIMOCInitStructure 的 TIMOCInitTypeDef 结构体变量,用于配置 TIM2 的输出通道2的各种参数,包括占空比、极性等。
    TIM_OCStructInit(&TIM_OCInitStructure);                                                                             

 //将 TIM_OCInitStructure 结构体变量中的所有成员设置为默认值,以避免未经初始化的寄存器值可能会导致不可预知的问题。
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                                                 

//设置 TIM2 输出通道2 的工作模式为 PWM1 模式,即高电平持续时间小于周期的情况下输出 PWM 信号,常用于控制电机等设备。
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;                                           

//设置 PWM 信号的极性为高电平有效。
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;                                   

//设置 TIM2 输出通道2 的使能状态为使能,即允许输出 PWM 信号。
    TIM_OCInitStructure.TIM_Pulse = 0;                                                                             

//设置 PWM 信号的占空比初始值为0,即输出一直保持低电平。
    TIM_OC2Init(TIM2, &TIM_OCInitStructure);                                                                           

//将配置好的 TIM_OCInitStructure 结构体应用到 TIM2 输出通道2 上,使之能够输出 PWM 信号。

    TIM_Cmd(TIM2, ENABLE);

//用于启动或停止指定定时器的函数。
                         
}

void PWM_SetCompare2(uint16_t Compare)                                                                             
{
    TIM_SetCompare2(TIM2, Compare);
}

/*用于设置定时器 TIM2 的输出通道 2(TIM2CH2)的比较值,从而实现 PWM 信号的调节。其中,PWMSetCompare2 函数接受一个参数 Compare,表示需要设置的比较值。PWMSetCompare2 函数的设计采用了封装的思想,从而提高了代码的可读性和可重用性。
通过将底层的驱动函数 TIMSetCompare2 封装在上层的函数中,可以隐藏掉一些具体实现的细节,使得主程序只需要调用简单易懂的函数即可实现复杂功能的实现。这种思想在编程中十分常见,被称为“模块化编程”,能够大大提高代码的灵活性和可维护性,
也是现代软件开发中非常重要的一部分。*/

 

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

STM32F10X单片机学习之PWM.C代码注解 的相关文章

  • 普冉32位单片机 PY32C642,M0+内核,1.7 V ~ 5.5 V宽工作电压

    PY32C642 单片机采用高性能的 32 位 ARM Cortex M0 内核 宽电压工作范围 嵌入 24Kbytes Flash 和 3 Kbytes SRAM 存储器 最高工作频率 24 MHz 包含多种不同封装类型产品 工作温度范围
  • Jmeter 性能压测-常遇问题与解决技巧

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 1.常用单词学习

    1 1 听力练习 第一课 Av264771740 P1 Av736460000 P1 哔哩哔哩 bilibili 有推荐的吗 这个和这个都很推荐 这个多少钱 请给我这个 全部 这些一共多少钱 卫生间在哪呢 一度 願 麻烦再来一次 英語話 会
  • 在职状态下继续学习的心得体会

    本来平时记录的都是一些技术点的学习和使用 今天打算记录一下学习方法 当然不一定适合所有人 因人而异 仅供参考 学习这件事 对于IT行业来说 真的是活到老学到老 技术的更新迭代速度非常快 而且总是有那么一些公司特别的卷 没办法 改变不了外因
  • 我当年自学黑客(网络安全)的一些心得!(内附学习笔记)

    前 言 写这篇教程的初衷是很多朋友都想了解如何入门 转行网络安全 实现自己的 黑客梦 文章的宗旨是 1 指出一些自学的误区 2 提供客观可行的学习表 3 推荐我认为适合小白学习的资源 大佬绕道哈 文末有福利 一 自学网络安全学习的误区和陷阱
  • 会stm32有机会进大公司吗?

    今日话题 会stm32有机会进大公司吗 我本科期间参与了飞思卡尔和电赛等比赛 使用过多种单片机 但渐渐发现单片机只是其中的一小部分 不要过分迷恋所谓的单片机基础和技巧 更值得深入研究的是C语言 如果你对此感兴趣 我愿意无偿分享一个资源包 其
  • Java 学习路线 2024 最新版!

    又对上次分享的 Java 学习路线进行了简单修改完善 并增加了免登录下载和黑夜模式 这里重发一下 花了一个月零碎的时间 我根据当下 Java 后端求职和招聘的最新要求 对之前写的 Java 后端学习路线进行了全面的优化和改进 添加图片注释
  • Python采集猎聘网站招聘数据内容,看看现在职位风向

    嗨喽 大家好呀 这里是爱看美女的茜茜呐 环境使用 Python 3 10 Pycharm 模块使用 第三方模块 需安装 requests gt pip install requests pandas gt pip install panda
  • Freertos低功耗管理

    空闲任务中的低功耗Tickless处理 在整个系统运行得过程中 其中大部分时间都是在执行空闲任务的 空闲任务之所以执行 因为在系统中的其他任务处于阻塞或者被挂起时才会执行 因此可以将空闲任务的执行时间转换成低功耗模式 在其他任务解除阻塞而准
  • 深入浅出《Delta-Sigma Data Converters》(可下载)

    在数字信号处理领域 数据转换器是实现模拟与数字世界之间无缝转换的关键组件 而在这个子领域中 Delta Sigma Data Converter s 一书以其全面和深入的内容 为工程师 学者甚至爱好者们提供了一个极其宝贵的资源 今天将为大家
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • 小白也能学会的创建Git仓库实操

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 【计算机毕业设计】精品课程在线学习系统

    如今社会上各行各业 都喜欢用自己行业的专属软件工作 互联网发展到这个时候 人们已经发现离不开了互联网 新技术的产生 往往能解决一些老技术的弊端问题 因为传统精品课程学习信息管理难度大 容错率低 管理人员处理数据费工费时 所以专门为解决这个难
  • 跨平台UI自动化框架:Airtest,游戏开发和应用测试的利器

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 独家 | 鸿蒙(HarmonyOS)开发详细学习笔记免费分享

    前言 华为宣布 将在1月18日 在北京 上海 杭州 南京 成都 厦门 武汉 长沙 8 大城市同时召开大会 届时将揭秘鸿蒙生态和 HarmonyOS NEXT 进阶新篇章 简单的来说就是 纯血鸿蒙系统 即将彻底揭晓 鸿蒙系统自推出来以来 就一
  • 【GRNN-RBFNN-ILC算法】【轨迹跟踪】基于神经网络的迭代学习控制用于未知SISO非线性系统的轨迹跟踪(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 第1部分 2 2 第2部分
  • 【GRNN-RBFNN-ILC算法】【轨迹跟踪】基于神经网络的迭代学习控制用于未知SISO非线性系统的轨迹跟踪(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 第1部分 2 2 第2部分
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • 肿瘤的转录调控:Cell子刊揭示原发性肝癌中转录因子活性的全基因组图谱|国自然热点

    转录调控的研究历史比较长 相关研究在近十年来仍一直增长 也是近年来高分文章的焦点之一 在2023年最佳国自然 中标 研究热点 转录调控中标率高达189 作为国自然热点之一的肿瘤微环境的研究在近几年也一直处于上升趋势 转录调控在肿瘤发生 发展
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次

随机推荐

  • 专利与论文-0:目录

    1 为什么要写专利 专利的好处 CSDN 2 什么是专利 专利的几种类型 CSDN 3 专利的特点是什么 什么不能申请专利 CSDN 4 专利申请流程与生命周期及费用 CSDN 5 专利说明书 的撰写与注意事项 CSDN 6 专利权利要求书
  • python爬虫系列8--Scrapy开发环境搭建和简单使用介绍

    简介 参考地址 http python jobbole com 86405 Python开发的一个快速 高层次的屏幕抓取和web抓取框架 用于抓取web站点并从页面中提取结构化的数据 Scrapy吸引人的地方在于它是一个框架 任何人都可以根
  • spring-boot-maven-plugin not found 解决方案

    今天尝试使用IDEA 搭建Spring Boot 项目 pom xml 核心文件如下
  • GLSL 简介

    GLSL OpenGL Shading Language 也称作 GLslang 是一个以C语言为基础的高阶着色语言 它是由 OpenGL ARB 所建立 提供开发者对绘图管线更多的直接控制 而无需使用汇编语言或硬件规格语言 目录 隐藏 1
  • 经纬度相关的一些计算

    欢迎访问我的个人博客 sky的技术小屋 1 已知两个位置的经纬度 计算其间地理距离 private static Double CalculateDistance ArrayList
  • L2TP的windows客户端连接

    转载及部分修改 1 首先需要搭建PPTP服务器 并配置账号密码 例如 2 选择新的连接或网络 3 选择连接到工作区 4 5 Internet 地址填写你购买账号的服务器名称或IP 目标名称随便都可以 6 配置登录 7 8 点击属性 修改模式
  • 项目k图绘制

    目录 数据准备 图标属性配置 数据准备 1 从后端接收数据 存入data数组内 2 按照项目需要切分数据 并将时间作为分类轴 X轴 的属性 3 计算均线 由于需要绘制MA5 MA10 MA20 MA30等均线 所以应先编写计算MA均线的函数
  • unity +百度UNIT

    百度UNIT使用保姆级别 百度UNIT 的 API使用理解 具体理解如下 过程步骤 创建UNIT Access Token获取 UNIT API的调用 Unity 源码 效果 百度UNIT 的 API使用理解 具体理解如下 创建 UNIT
  • android Socket 长连接出错:android.system.ErrnoException: connect failed: ECONNREFUSED Connection refuse

    Android 端做Socket 长连接测试 报错 提示说连接被拒绝 java net ConnectException failed to connect to 192 168 0 101 port 8081 connect failed
  • 【HCIA】虚拟化技术介绍

    虚拟化技术介绍 虚拟化 Virtualization 的含义很广泛 将任何一种形式的资源抽象成另一种形式的技术都是虚拟化 是资源的一种逻辑表示 解除了物理硬件和操作系统之间的紧耦合关系 虚拟化是云计算的基础 简单地说 虚拟化使得在一台物理的
  • 卷积操作的填充和输出大小的公式

    输入图像大小为II 卷积核大小为kk 填充为p 步长为s 输出大小为O O 那么 如果输出不能对齐 常采用下采用
  • c语言中变量不初始化会怎么样?

    目录 变量初始化 未初始化 随机数的产生 产生原理 初始化必要性 问题来源 在日常学习结构体的语法时看到文章中用数组进行举例 进行输出 在讨论数组是否初始化 输出的值的问题 代码如下 include
  • CTFHUB-UA注入

    User Agent User Agent 通常就是用户的浏览器相关信息 例如 User Agent Mozilla 5 0 X11 Linux x86 64 rv 12 0 Gecko 20100101 Firefox 12 0 Hack
  • HTTP Status 500 An exception occurred processing JSP page

    问题代码 出现异常界面 从上图可知在19处出现了异常 主要有两处 以及 为了很好的解决以上错误 我们将依次把传进来的各个参数在tomcat控制台上打印输出 先看看结果 主要操作代码 控制台显示结果 从以上输出可看到getRemoteAddr
  • Object.keys()、Object.values()、Object.entries()详解

    在JavaScript中 Object keys 是一个内置函数 用于获取一个对象中所有可枚举属性的名称 并返回一个包含这些属性名称的数组 以下是使用Object keys 函数的示例 const obj a 1 b 2 c 3 const
  • 代码混淆后可能出现的问题

    1 ClassNotFoundException NoSuchMethodError 原因 这种异常会在好多情况下出现 比如 本地代码通过反射调用其他的类 但是经过了混淆之后 就会出现如上异常 调用了JNI之后 C或者C 和java代码进行
  • 前端面试题复习二

    组件中写 name 选项有什么作用 项目使用 keep alive 时 可搭配组件 name 进行缓存过滤 DOM 做递归组件时需要调用自身 name Vue devtools 调试工具里显示的组见名称是由 Vue 中组件 name 决定的
  • 战双服务器维护,战双帕弥什维护到几点 战双帕弥什维护什么时候结束

    战双帕弥什今日正式火爆开测 随着大量玩家的加入 服务器也难免出现了过载情况 很多玩家在登陆时出现了战双帕弥什提示服务器未开放请稍后再试的情况 那么战双帕弥什维护什么时候结束 战双帕弥什维护原因是什么 快一起了解一下吧 战双帕弥什维护原因 1
  • C++ 匿名对象的生命周期——强化训练(二)

    include
  • STM32F10X单片机学习之PWM.C代码注解

    include stm32f10x h Device header void PWM Init void RCC APB1PeriphClockCmd RCC APB1Periph TIM2 ENABLE 开启 APB1 外设总线上的外设时