实验三-设计一个频率可变的方波发生器

本文介绍了如何使用C语言编程实现一个可以由I/O口按键控制频率的方波发生器,通过TIM3定时器调整PWM输出频率,支持1kHz和500Hz两种选择。
摘要由CSDN通过智能技术生成

实验目的:设计一个频率可变的方波发生器。要求至少可以选择两种频率,由I/O口的按键控制。

代码:

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#define PWM_FREQ_1 500   
#define PWM_FREQ_2 500   
int main(void)
 {		
	u16 led0pwmval = PWM_FREQ_1;
    u8 key_state = 0;
    u8 key_state_prev = 0;
// 	u16 led0pwmval=0;
	u8 dir=1;	
	vu8 key=0;
	delay_init();	    	 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 
	uart_init(115200);	 
 	LED_Init();			     
	KEY_Init();
 	TIM3_PWM_Init(999,7199);	 //10hz

while (1)
    {
        key_state = KEY_Scan(0);  
        if (key_state && (key_state != key_state_prev))
        {
            if (key_state == 2)  // KEY1
            {
         TIM_PrescalerConfig(TIM3, 71, TIM_PSCReloadMode_Update);  // 1kHz
                led0pwmval = PWM_FREQ_1;  // 50%
            }
            else if (key_state == 1)  // KEY2
            {
          TIM_PrescalerConfig(TIM3, 143, TIM_PSCReloadMode_Update);  // 500Hz
                led0pwmval = PWM_FREQ_2;  // 50%
            }
        }
        key_state_prev = key_state;  
        TIM_SetCompare2(TIM3, led0pwmval);  
        delay_ms(10);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值