2024-09-01
售卖作品
00

目录

使用STM32F102C8T6实现PWM控制的项目教程
硬件配置
功能概述
软件实现
1. 引入必要的头文件
2. 按键功能定义
3. 全局变量定义
4. 更新显示屏内容
5. 按键处理函数
6. 主函数
7. 定时器中断服务程序
具体实现说明
1. 初始化
2. 更新显示
3. 按键处理
4. 主循环
5. 中断处理
总结

硬件:

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

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!