【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. 引入必要的头文件
c 复制代码
#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. 按键功能定义
c 复制代码
// 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. 全局变量定义
c 复制代码
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. 更新显示屏内容
c 复制代码
void update_display(void) {
    // ...显示更新逻辑...
}
5. 按键处理函数
c 复制代码
void process_key(u8 key) {
    // ...按键处理逻辑...
}
6. 主函数
c 复制代码
int main(void) {
    // ...初始化代码...

    while (1) {
        // ...主循环代码...
    }
}
7. 定时器中断服务程序
c 复制代码
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显示屏进行嵌入式系统开发。希望这个教程对你的开发工作有所帮助。

相关推荐
电鱼智能的电小鱼3 小时前
基于电鱼 AI 工控机的智慧工地视频智能分析方案——边缘端AI检测,实现无人值守下的实时安全预警
网络·人工智能·嵌入式硬件·算法·安全·音视频
电院工程师8 小时前
SIMON64/128算法Verilog流水线实现(附Python实现)
python·嵌入式硬件·算法·密码学
Shang180989357268 小时前
T41LQ 一款高性能、低功耗的系统级芯片(SoC) 适用于各种AIoT应用智能安防、智能家居方案优选T41L
人工智能·驱动开发·嵌入式硬件·fpga开发·信息与通信·信号处理·t41lq
BreezeJuvenile9 小时前
外设模块学习(8)——HC-SR04超声波模块(STM32)
stm32·单片机·嵌入式硬件·学习·超声波测距模块·hc-sr04
安庆平.Я12 小时前
STM32——定时器
stm32·单片机·嵌入式硬件·定时器
ACP广源盛1392462567312 小时前
(ACP广源盛)GSV2231---DisplayPort 1.4 MST 到 HDMI 2.0/DP/Type-C 转换器(带嵌入式 MCU)
c语言·开发语言·单片机·嵌入式硬件·音视频·mst
电鱼智能的电小鱼13 小时前
基于电鱼 ARM 边缘网关的智慧工地数据可靠传输方案——断点续传 + 4G/5G冗余通信,保障数据完整上传
arm开发·人工智能·嵌入式硬件·深度学习·5g·机器学习
范纹杉想快点毕业13 小时前
12个月嵌入式进阶计划ZYNQ 系列芯片嵌入式与硬件系统知识学习全计划(基于国内视频资源)
c语言·arm开发·单片机·嵌入式硬件·学习·fpga开发·音视频
NEU-UUN14 小时前
1.2.STM32简介——全程手敲板书
stm32·单片机·嵌入式硬件
三佛科技-1341638421214 小时前
全自动削皮机方案,果蔬去皮机/削皮机MCU控制方案开发设计
单片机·嵌入式硬件