基于STM32的可调频率和占空比的互补方波发生器

本文介绍了一个使用STM32f4微控制器实现的可调节频率(100~500HZ)和占空比(0-100%)的互补方波发生器。程序通过矩阵键盘输入参数,并在液晶显示屏上显示。频率调整通过修改预分频系数实现,占空比调整则在TIM2的中断中设置比较值。重点解决了矩阵键盘、屏幕显示与单片机交互的难题,实现了独立工作的各个模块。附带主函数和矩阵键盘代码。
摘要由CSDN通过智能技术生成

概述
实现效果:
在这里插入图片描述
在这里插入图片描述

该程序实现的功能:用STM32f4输出可调频率(100~500HZ)和占空比(0—100)互补方波,通过矩阵键盘输入数据,用液晶显示屏显示参数。
修改占空比的方式:在TIM2的通用定时器的中断(21kHZ)中,用TIM_SetCompare函数设置比较值。
修改频率的方式:只需要修改预分频的系数就好了,我尝试了两个方式,第一种是用TIM_PrescalerConfig()函数修改预分频器的值,但是输出不准确。因此我采用初始化的函数TIM_PWM_Init()装值。
该程序难点在于矩阵键盘,屏幕和单片机三者的结合,包括如何正确读出矩阵键盘输入的字符串和数字,如何设置屏幕显示,如何设置代码的顺序,使整个程序各个部分能独立工作不相互干扰。从开始到完成的5个小时中,我4个多钟都在解决上面的难点。我这里设置了三个mode区分修改频率,修改占空比和正常输出状态。
话不多说,直接上代码(显示屏的底层代码略过):

主函数代码

#include "sys.h"
#include "delay.h"
#include "usart1.h"
#include "usart2.h"
#include "led.h"
#include "pwm.h"
#include "timer.h"
#include "adc.h"
#include "pid.h"
#include "key.h"
#include "keyboard.h"
#include "data.h"
#include "string.h"
#include "math.h"
#include "Lcd_Driver.h"
#include "GUI.h"
#include "QDTFT_demo.h"
#include "encoder.h"

char clear[20];
char freq_buffer[3];//频率转化为字符串
char duty_buffer[3];//占空比转化为字符串
int frequency=300;//初始频率
u8 duty=50;//初始占空比
u8 mode=2;//初始mode,其中0:set freq 1:set duty 2:ordinary
u32 psc=1400;//分频系数,初始300

void CLEAR(int i)		//显示屏清除某行的多少的函数
{
	int n;
	for(n=0;n<i;n++)
	{
		clear[n]=' ';
	}
	clear[n]='\0';
}
void sho
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值