【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显示屏进行嵌入式系统开发。希望这个教程对你的开发工作有所帮助。

相关推荐
无畏jh10 分钟前
TLE5012B磁阻芯片解读
嵌入式硬件·汽车嵌入式·磁阻芯片
培林将军18 分钟前
Altium Designer 22的安装与汉化
嵌入式硬件·ad工具安装
idcardwang20 分钟前
xl9555-IO拓展芯片
stm32·单片机·嵌入式硬件
Y1rong23 分钟前
STM32之EXTI
stm32·单片机·嵌入式硬件
兆龙电子单片机设计28 分钟前
【STM32项目开源】STM32单片机智能语音家居控制系统
stm32·单片机·嵌入式硬件·物联网·开源·自动化
TaidL1 小时前
茂捷M1020电感式编码器芯片赋能工业智能升级,适用于工业及机器人等领域的各种应用场景
单片机·嵌入式硬件
意法半导体STM321 小时前
【官方原创】SAU对NSC分区的影响 LAT1578
stm32·单片机·嵌入式硬件·mcu·信息安全·trustzone·stm32开发
SmartRadio1 小时前
MK8000(UWB射频芯片)与DW1000的协议适配
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·dw1000
LDR0061 小时前
芯片电路的引脚标识代表什么?
stm32·单片机·嵌入式硬件
恒锐丰小吕2 小时前
屹晶微 EG3116 600V高压、2A/2.5A驱动、双高有效输入逻辑的半桥栅极驱动芯片技术解析
嵌入式硬件·硬件工程