硬件:
STM32F102C8T6核心板,按键,0.96 OLED显示屏。
软件:
1、硬件启动触发单片机输出PWM,未触发之前PWM输出为低电平。
2、按键修改PWM的变化模式、变化时间长度、占空比上下限。
3、输出的PWM是固定的10kHZ的。
4、变化模式有:
(1)占空比从低到高,再回到最低重新从低到高;
(2)占空比从高到低,再回到最高重新从高到低;
(3)占空比保持不变;
变化时间可以选择有10ms到5000ms;
占空比可以选择有0%到100%。PWM是高电平有效。
核心板:STM32F102C8T6
按键:用于设置和修改PWM参数
显示屏:0.96 OLED显示屏
硬件启动:触发单片机输出PWM,未触发之前PWM输出为低电平。
按键功能:修改PWM的变化模式、变化时间长度、占空比上下限。
PWM输出:固定频率为10kHz。
变化模式:
占空比从低到高,再回到最低重新从低到高。
占空比从高到低,再回到最高重新从高到低。
占空比保持不变。
变化时间:可选范围为10ms到5000ms。
占空比范围:可选范围为0%到100%。
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"
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
cchar 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];
cvoid update_display(void) {
// ...显示更新逻辑...
}
cvoid process_key(u8 key) {
// ...按键处理逻辑...
}
cint main(void) {
// ...初始化代码...
while (1) {
// ...主循环代码...
}
}
cvoid TIM4_IRQHandler(void) {
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) {
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
if (start_pwm == 1) {
time_ms_rtc++;
}
}
}
初始化包括设置中断优先级、延时函数初始化、关闭JTAG使能SWD模式、UART初始化、LED和OLED初始化、按键初始化、ADC初始化、定时器初始化等。
更新显示函数update_display
负责根据当前设置的模式、时长和占空比等信息更新OLED显示屏的内容。
按键处理函数process_key
根据按键输入修改模式、时长和占空比,并更新相应的显示内容。
主循环中定期检查按键输入并进行相应处理,同时根据模式和当前时间调整PWM占空比。
定时器中断服务程序TIM4_IRQHandler
在每次定时器更新中断时更新当前时间,并根据模式调整PWM占空比。
该项目通过STM32F102C8T6核心板和0.96 OLED显示屏实现了PWM信号的生成和控制,支持通过按键设置PWM的变化模式、时长和占空比范围。该项目展示了硬件启动、按键处理、显示更新和定时器中断等多种嵌入式系统开发的基本技能。
通过这个项目,你可以深入了解PWM信号的生成和控制方法,以及如何使用STM32微控制器和OLED显示屏进行嵌入式系统开发。希望这个教程对你的开发工作有所帮助。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!