【TB作品】STM32F102C8T6单片机,PWM发生器

硬件:
STM32F102C8T6核心板,按键,0.96 OLED显示屏。
软件:
1、硬件启动触发单片机输出PWM,未触发之前PWM输出为低电平。
2、按键修改PWM的变化模式、变化时间长度、占空比上下限。
3、输出的PWM是固定的10kHZ的。
4、变化模式有:
(1)占空比从低到高,再回到最低重新从低到高;
(2)占空比从高到低,再回到最高重新从高到低;
(3)占空比保持不变;
变化时间可以选择有10ms到5000ms;
占空比可以选择有0%到100%。PWM是高电平有效。

在这里插入图片描述

使用STM32F102C8T6实现PWM控制的项目教程

硬件配置

  • 核心板:STM32F102C8T6
  • 按键:用于设置和修改PWM参数
  • 显示屏:0.96 OLED显示屏

功能概述

  1. 硬件启动:触发单片机输出PWM,未触发之前PWM输出为低电平。
  2. 按键功能:修改PWM的变化模式、变化时间长度、占空比上下限。
  3. PWM输出:固定频率为10kHz。
  4. 变化模式
    • 占空比从低到高,再回到最低重新从低到高。
    • 占空比从高到低,再回到最高重新从高到低。
    • 占空比保持不变。
  5. 变化时间:可选范围为10ms到5000ms。
  6. 占空比范围:可选范围为0%到100%。

软件实现

1. 引入必要的头文件
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "oled.h"
#include "led.h"
#include "timer.h"
#include "key.h"
#include "adc.h"
2. 按键功能定义
// 16个按键功能
// 1  2  3  A
// 4  5  6  B
// 7  8  9  C
// *  0  #  D
// A 设置模式
// B 设置时长
// C 设置占空比min_puty
// D 设置占空比max_puty
// * 直接打开PWM
// # 直接关闭PWM
3. 全局变量定义
char display_str[16];
u8 dis_cnt = 0;
u16 mode = 1; // 1:递增 2:递减 3:不变 4:递增递减
u32 max_ms_time = 5000; // 在这么多时间后复原
u16 min_puty = 15; // 占空比可以是0到100%
u16 max_puty = 86; // 占空比可以是0到100%
u16 start_pwm = 0; // 触发占空比生产

u32 time_ms_rtc = 0; // 当前时间
u32 time_ms_rtc_used = 0;
u8 set_which = 0; // 0:没有设置 1:设置模式 2:设置时长 3:设置占空比min_puty 4:设置占空比max_puty
u8 set_which_num_cnt = 0;
u8 set_which_input_buf[6];
4. 更新显示屏内容
void update_display(void) {
    // ...显示更新逻辑...
}
5. 按键处理函数
void process_key(u8 key) {
    // ...按键处理逻辑...
}
6. 主函数
int main(void) {
    // ...初始化代码...

    while (1) {
        // ...主循环代码...
    }
}
7. 定时器中断服务程序
void TIM4_IRQHandler(void) {
    if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) {
        TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
        if (start_pwm == 1) {
            time_ms_rtc++;
        }
    }
}

具体实现说明

1. 初始化

初始化包括设置中断优先级、延时函数初始化、关闭JTAG使能SWD模式、UART初始化、LED和OLED初始化、按键初始化、ADC初始化、定时器初始化等。

2. 更新显示

更新显示函数update_display负责根据当前设置的模式、时长和占空比等信息更新OLED显示屏的内容。

3. 按键处理

按键处理函数process_key根据按键输入修改模式、时长和占空比,并更新相应的显示内容。

4. 主循环

主循环中定期检查按键输入并进行相应处理,同时根据模式和当前时间调整PWM占空比。

5. 中断处理

定时器中断服务程序TIM4_IRQHandler在每次定时器更新中断时更新当前时间,并根据模式调整PWM占空比。

总结

该项目通过STM32F102C8T6核心板和0.96 OLED显示屏实现了PWM信号的生成和控制,支持通过按键设置PWM的变化模式、时长和占空比范围。该项目展示了硬件启动、按键处理、显示更新和定时器中断等多种嵌入式系统开发的基本技能。

通过这个项目,你可以深入了解PWM信号的生成和控制方法,以及如何使用STM32微控制器和OLED显示屏进行嵌入式系统开发。希望这个教程对你的开发工作有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

王思聪日本街头在被偶遇

王思聪日本街头再被偶遇,甜蜜约会日常成网友热议焦点近日,有网友在日本街头再次偶遇了“国民老公”王思聪,这次他不仅携带着一位美丽的女友,还展现出了两人之间亲密无间的互动,让不少网友感叹:这真的是每天…

Kafka 如何保证消息顺序及其实现示例

Kafka 如何保证消息顺序及其实现示例 Kafka 保证消息顺序的机制主要依赖于分区(Partition)的概念。在 Kafka 中,消息的顺序保证是以分区为单位的。下面是 Kafka 如何保证消息顺序的详细解释: ⭕分区内消息顺序 顺序写入&#…

掌握特劳特定位理论核心,明晰企业战略定位之重

在当今瞬息万变的市场环境中,企业战略定位的重要性日益凸显。它不仅是企业在激烈竞争中保持优势的关键,更是企业实现长期可持续发展的基石。 哈佛大学战略学教授迈克尔波特(Michael Porter)指出战略就是形成一套独具的运营活动&a…

前端组件样式穿透修改

背景: 在style经常用scoped属性实现组件的私有化时,要改变element-ui某个深层元素(例如.el-input__inner)或其他深层样式, 但是element-ui 并没有提供修改的接口。 这时,就是需要手动修改样式。 解决方法…

Oracle备份失败处理,看这一篇就够了!

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…

canvas学习

Canvas API 提供了一个通过 JavaScript 和 HTML 的 元素来绘制图形的方式。它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。 Canvas 的基本用法 <canvas> 元素 <canvas id"tutorial" width"150" height"150&quo…

基数和基数转换

目录 一、定义&#xff1a; 二、各个进制&#xff1a; 1、二进制&#xff1a; 2、八进制&#xff1a; 3、十进制&#xff1a; 4、十六进制&#xff1a; 三、基数转换&#xff1a; 1、各类基数转十进制&#xff1a; 二转十&#xff1a; 八转十&#xff1a; 十六转八&a…

1. 人工智能中的相关术语的概述

1.1 机器学习的概念&#xff1a;机器学习是指从有限的观测数据中学习出具有一般性的规律&#xff0c;并利用这些规律对未知数据进行预测的方法。机器学习可以分为监督学习&#xff0c;无监督学习和强化学习。 传统的机器学习主要关注于如何学习一个预测模型。一般需要首先将数据…

【教程】学会用PS做海报(教你如何套模板+模板资源),以研电赛展架为例

网上的视频都是好几十个小时&#xff0c;看起来很耗费时间&#xff0c;其实做海报&#xff0c;展架只用到其中的一部分功能&#xff0c;本文会进行讲解 这里写目录标题 去年研电赛做的展架1.首先打开比赛给的展板照片&#xff0c;按照研电赛要求设置大小2.调出ps的几个窗口&am…

苹果发布云AI系统;谷歌警告0day漏洞被利用;微软紧急推迟 AI 召回功能;劫持活动瞄准 K8s 集群 | 网安周报0614

苹果发布私有云计算&#xff0c;开创 AI 处理新时代&#xff0c;隐私保护再升级&#xff01; 苹果宣布推出一个名为“私有云计算”&#xff08;PCC&#xff09;的“开创性云智能系统”&#xff0c;该系统专为在云中以保护隐私的方式处理人工智能&#xff08;AI&#xff09;任务…

【数学竞赛】阿里巴巴全球数学竞赛(附2019-2024年试题+答案)

阿里巴巴全球数学竞赛对所有年龄、背景和职业的个人开放。迄今为止&#xff0c;最年长的参赛者超过80岁&#xff0c;最年轻的仅8岁。 2024年共计801名选手参加比赛&#xff0c;涟水这中专的姜萍获得了全球12名的出众成绩&#xff0c;港中大也抛出了橄榄枝。 初赛注重享受数学之…

【Linux内核】伙伴系统算法和slab分配器(1)

【Linux内核】伙伴系统算法和slab分配器&#xff08;1&#xff09; 目录 【Linux内核】伙伴系统算法和slab分配器&#xff08;1&#xff09;伙伴系统&#xff08;buddy&#xff09;算法伙伴系统算法基本原理内存申请内存回收 接口函数源码分析内存分配接口物理内存释放接口规范…

【TypeScript】类型兼容(协变、逆变和双向协变)

跟着小满zs 学习 ts&#xff0c;原文&#xff1a;学习TypeScript进阶类型兼容_typescript进阶阶段类型兼容 小满-CSDN博客 类型兼容&#xff0c;就是用于确定一个类型是否能赋值给其他的类型。如果A要兼容B 那么A至少具有B相同的属性。 // 主类型 interface A {name: string,a…

【游戏】一款纯web集前后端为一体的沙盒游戏框架介绍

1.biomes-game是什么&#xff1f; 一款基于MIT协议开源沙盒 MMORPG。游戏中可建造、采集、玩迷你游戏等等&#xff0c;所有操作均可通过浏览器完成。它主要使用React框架&#xff0c;前后端用 Typescript 和 WebAssembly 编写。 2.如何本地体验&#xff1f; 配置&#xff1a;…

计算机网络 —— 一文搞懂TCP/UDP

传输层&#xff1a;TCP/UDP 1. TCP1.1 TCP连接管理1.2 TCP首部格式 2. UDPUDP首部格式 3. 其他传输层协议3.1 SCTP3.2 DCCP 传输层实现源端主机和目标端主机上对等实体间会话&#xff0c;TCP/IP中两个代表性的传输层协议分别是TCP和UDP&#xff0c;两者均使用端口来标识传输数据…

数据防泄漏的六个步骤|数据防泄漏软件有哪些

在当前复杂多变的网络安全环境下&#xff0c;数据防泄漏软件成为了企业信息安全架构中不可或缺的一环。下面以安企神软件为例&#xff0c;告诉你怎么防止数据泄露&#xff0c;以及好用的防泄露软件。 1. 安企神软件 安企神软件是当前市场上备受推崇的企业级数据防泄漏解决方案…

为什么微信输入法是比搜狗输入法更好的选择?

微信输入法官网&#xff1a;https://z.weixin.qq.com/ 最近使用搜狗输入法时&#xff0c;频繁弹出广告&#xff0c;实在令人烦恼&#xff0c;于是我干脆卸载了它。然而&#xff0c;电脑上没有输入法是不行的。经过在网上对比了许多输入法软件后&#xff0c;我发现了微信输入法。…

算法:分治(快排)题目练习

目录 题目一&#xff1a;颜色分类 题目二&#xff1a;排序数组 题目三&#xff1a;数组中的第k个最大元素 题目四&#xff1a;库存管理III 题目一&#xff1a;颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;…

红队攻防渗透技术实战流程:中间件安全:JettyJenkinsWeblogicWPS

红队攻防渗透实战 1. 中间件安全1.1 中间件-Jetty-CVE&信息泄漏1.2 中间件-Jenkins-CVE&RCE执行1.2.1 cve_2017_1000353 JDK-1.8.0_291 其他版本失效1.2.2 CVE-2018-10008611.2.3 cve_2019_100300 需要用户帐号密码1.3 中间件-Weblogic-CVE&反序列化&RCE1.4 应…

驱动开发(四):Linux内核中断

驱动开发系列文章&#xff1a; 驱动开发&#xff08;一&#xff09;&#xff1a;驱动代码的基本框架 驱动开发&#xff08;二&#xff09;&#xff1a;创建字符设备驱动 驱动开发&#xff08;三&#xff09;&#xff1a;内核层控制硬件层 驱动开发&#xff08;四&#xf…