实验目的:设计一个频率可变的方波发生器。要求至少可以选择两种频率,由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);
}
}