(PWM呼吸灯)合泰开发板HT66F2390-----点灯大师

前言

上一篇文章相信大家已经成为了点灯高手了,那么进阶就是成为点灯大师 实现PWM呼吸灯
接下来就是直接的代码讲解了,不再讲PWM原理的
这里部分内容参考了另一个博主的文章
合泰杯——合泰单片机工程7之PWM输出

如果有小伙伴不理解引脚设置和delay函数生成或者环境配置的可以浏览上一章内容
合泰杯开发板HT66F2390入门教程(点亮LED灯)——获得成就:点灯大师
本文中会讲解代码为什么要这样配置寄存器和引脚才可以制作呼吸灯(内容可能不完整,持续更新)

代码

#include "HT66F2390.h" 
const int Period = 4095;        // 定义PWM周期为4095
void setLED_PWM(unsigned long Duty);
void delay(unsigned long count); // 声明延时函数
void PWM_Init(void);
void main()
{_wdtc=0b10101011;  //关闭看门狗int i=0;PWM_Init();while(1){	for(i=0;i<Period;i++){delay(50);setLED_PWM(i);}for(i=Period;i>0;i--){delay(50);setLED_PWM(i);  }			}
}void delay(unsigned long count)  //延时10us级别
{volatile unsigned long i;for(i=0;i<count;i++)asm("nop");
}void setLED_PWM(unsigned long Duty)
{_ptm3ah =Duty/256;      //占空比设置_ptm3al =Duty%256;
}void PWM_Init(void){_ptm3c0=0b00001000;	   //时钟选择为8MHz/4_ptm3c1=0b10101000;    //功能选择寄存器,选择PWM输出且低有效_ptm3rph=Period/256;    //周期设置,写入CCRP的两个寄存器之中这个是把16位的数据划分成高8位和低8位_ptm3rpl=Period%256;_pds1=0b00000010;       //PTP3引脚选择,接的是D4_emi=1;                //开启总中断
}

代码讲解

学过PWM的同学都能理解呼吸灯的原理,同样,本文中的呼吸灯原理就是通过配置HT66F2390中周期型TM寄存器实现PWM控制,这里就不对PWM原理进行讲解了

可以打开该芯片的数据手册
合泰官方HT66F2390数据手册

我们要使用PWM的话,想一想肯定和定时器有关,那么我们能就翻开数据手册找到定时器有关的内容
在旁边的目录就能找到
在这里插入图片描述

如图,我们发现了PWM的身影,那么就接着往下看看
在这里插入图片描述

这里我们看到了PTM的输出引脚,其中的数字代表的不同引脚类型,后面有说(本文章使用的PTM,如果你要使用STM也是差不多的思路)那这个时候我们就又要跳到PTM相关的内容了

在这里插入图片描述

这个时候我们发现上面的数字PTPn很有可能就是代表下面的n,然后又可以发现n=0~1是10-bit,n=2和3是16-bit的,我们选择16位所以选择n为2或者3
接着往下看这些寄存器代表什么意思

在这里插入图片描述

那我们就可以发现这些寄存器是配置计数器,周期和占空比之类的
最重要的是下面这两个寄存器
PTMnC0和PTMnC1,n的数值代表多少位的计数器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
那么看到这里,我想用n = 3(16位计数器),PWM输出高有效,那么是不是就把这两个寄存器配置为,如果是你要10位n=1的话就是_ptm1c0 = 0bxxxxxxxx;

    _ptm3c0=0b00001000;	   //时钟选择为8MHz/4_ptm3c1=0b10101000;    //功能选择寄存器,选择PWM输出且高有效

然后周期和占空比也知道怎么配置了,也是同理配置寄存器

    _ptm3rph=Period/256;    //周期设置,写入CCRP的两个寄存器之中这个是把16位的数据划分成高8位和低8位_ptm3rpl=Period%256;    _ptm3ah =Duty/256;      //占空比设置_ptm3al =Duty%256;

然后我配置了寄存器但是我要知道怎如何使用他,他是哪个引脚呢,那么就需要回到前面这个图了
在这里插入图片描述
我们选择的n = 3,那么就是输出引脚为PTP3,我们接下来看看这个HT66F2390芯片的引脚图

在这里插入图片描述

我们发现他有两个引脚的复用都是PTP3,那么说明这两个引脚都可以使用PWM功能,接下来就是需要知道怎么配置复用功能引脚了
例如我要用PD4就去设置复用功能

在这里插入图片描述
这里如果你想用PB2也是一样的意思,找到PBS1或这PBS0看看

最终我们的初始化PWM代码就可以有下面的部分,我这里是n=3,PD4引脚

void PWM_Init(void){_ptm3c0=0b00001000;	   //时钟选择为8MHz/4_ptm3c1=0b10101000;    //功能选择寄存器,选择PWM输出且低有效_ptm3rph=Period/256;    //周期设置,写入CCRP的两个寄存器之中这个是把16位的数据划分成高8位和低8位_ptm3rpl=Period%256;_pds1=0b00000010;       //PTP3引脚选择,接的是D4_emi=1;                //开启总中断
}

设置占空比

void setLED_PWM(unsigned long Duty)
{_ptm3ah =Duty/256;      //占空比设置_ptm3al =Duty%256;
}

最后一个也是关键的内容
在这里插入图片描述
这里就可以说明为什么我们的代码是这样的了,这里的delay参数是10us

const int Period = 4095;        // 定义PWM周期为4095while(1){	for(i=0;i<Period;i++){delay(50);setLED_PWM(i);}for(i=Period;i>0;i--){delay(50);setLED_PWM(i);  }			}

结果演示

PWM呼吸灯演示视频

总结

这个也是最近学习的内容,网上的详细教程也比较少,最后也是自己看着别人的例程对着数据手册写出来的,所以打算自己写一个完整的阅读数据手册配置寄存器完成指定目的的思路,这也大大提升了我阅读数据手册的能力,加下来学习其他的功能我也会继续更新我自己的学习的内容和教程

如果有错误的地方或者需要改进的地方欢迎大家指出!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/506183.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GO-接口

1. 接口 在Go语言中接口&#xff08;interface&#xff09;是一种类型&#xff0c;一种抽象的类型。 interface是一组method的集合&#xff0c;接口做的事情就像是定义一个协议&#xff08;规则&#xff09;&#xff0c;只要一台机器有洗衣服和甩干的功能&#xff0c;我就称它…

【python】爬取链家二手房数据做数据分析【附源码】

一、前言、 在数据分析和挖掘领域中&#xff0c;网络爬虫是一种常见的工具&#xff0c;用于从网页上收集数据。本文将介绍如何使用 Python 编写简单的网络爬虫程序&#xff0c;从链家网上海二手房页面获取房屋信息&#xff0c;并将数据保存到 Excel 文件中。 二、效果图&#…

Java项目layui分页中文乱码

【问题描述】这部分没改之前中文乱码。 【解决办法】在layui.js或者layui.all.js文件中替换共、页、条转换成Unicode码格式。 字符Unicode共&#x5171页&#x9875条&#x6761【完美解决】改完之后重新运行项目&#xff0c;浏览器F12缓存清除就好了&#xff0c;右键

06 OpenCV增加图像的对比度

文章目录 理论API代码 理论 图像变换可以看作如下&#xff1a; 像素变换 – 点操作邻域操作 – 区域 调整图像亮度和对比度属于像素变换-点操作 API saturate_cast(value)确保值大小范围为0~255之间Mat.at(y,x)[index]value 给每个像素点每个通道赋值 代码 #include <…

C++真题列表

题目解析&#xff1a;RAM是闪存&#xff0c;只要一关机一拔电&#xff0c;就会丢失数据 题目解答&#xff1a;A 题目解析&#xff1a;TXT格式是文本文档 题目解答&#xff1a;B 题目解析&#xff1a;IP地址中每一个字节的取值范围是[0~255]&#xff0c;是不可能有256的 题目…

《秦时明月》IP新高度:与陕西历史博物馆共同书写文化传承新篇章!

在IP产业风起云涌的今天&#xff0c;如何以创意和匠心为传统文化注入新的活力&#xff0c;成为了摆在每一位文化工作者面前的重要课题。近日&#xff0c;《秦时明月》作为一部深受观众喜爱的国产动画IP&#xff0c;在迎来其十七周年之际&#xff0c;联手陕西历史博物馆&#xf…

Vue+SpringBoot打造知识图谱构建系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 知识图谱模块2.2 知识点模块2.3 学生测评模块2.4 学生成绩模块 三、系统展示四、核心代码4.1 查询知识点4.2 新增知识点4.3 查询知识图谱4.4 查询学生成绩4.5 查询学生成绩 五、免责说明 一、摘要 1.1 项目介绍 基于J…

家政按摩上门服务小程序搭建

家政按摩上门服务小程序支持技师入驻申请&#xff0c;用户可以通过在线下单预约家政服务&#xff0c;并根据距离、价格、销量好评度等条件进行筛选和选择。用户可以选择技师进行预约&#xff0c;并填写自己的服务地点和时间&#xff0c;享受上门服务。同时&#xff0c;技师也可…

20240302-2-dubbo面试题(一)

1、为什么要用 Dubbo&#xff1f; 随着服务化的进一步发展&#xff0c;服务越来越多&#xff0c;服务之间的调用和依赖关系也越来越复杂&#xff0c;诞生了面向服务的架构体系(SOA)&#xff0c;也因此衍生出了一系列相应的技术&#xff0c;如对服务提供、服务调用、连接处理、…

Java ZooKeeper-RocketMQ 面试题

Java ZooKeeper-RocketMQ 面试题 前言1、谈谈你对ZooKeeper的理解 &#xff1f;2、Zookeeper的工作原理&#xff08;Zab协议&#xff09;3、谈谈你对分布式锁的理解&#xff0c;以及分布式锁的实现&#xff1f;4、 zookeeper 是如何保证事务的顺序一致性的&#xff1f;5、 zook…

[vscode] 1. 在编辑器的标签页下显示文件目录(标签页显示面包屑) 2. 在标题栏上显示当前文件的完整路径

1. 标签页显示面包屑 view->Appearance->Breadcrumbs 2. 在标题栏上显示当前文件的完整路径 搜索 window.title将原来的值activeEditorShort 修改为 activeEditorMedium 参考&#xff1a; vscode在编辑器的标签页下显示文件目录&#xff08;标签页显示面包屑&#xf…

【Java数据结构】——二叉搜索树

目录 &#x1f388;概念 &#x1f388;操作-查找 &#x1f388;操作-插入 &#x1f388;操作-删除&#xff08;难点&#xff09; &#x1f388;概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树 : 若它的左子树不为空&a…