毕设做的是基于STM32的信号发生器设计。分享给大家。
带有LCD显示当前频率、幅值、相位信息
按键可调输出频率、幅值、相位
版本内容/:
增加lcd显示GUI
增加按键处理,可以调整波形参数
4.16:更新记录:
添加文件dds.c .h ,将三个函数放在dds.c中,并修改参数类型
double get_omega (struct WaveTypedef *wave) ;
double get_phase (struct WaveTypedef *wave);
u32 get_period (struct WaveTypedef *wave) ;
修改gui.c文件中的函数 并将基于全局变量,改为基于结构体参数
void dds_updata_data (void) ;
void dds_updata_data (struct WaveTypedef *wave) ;
增加确认按键
GPIOKey3 按下。则将tmpwavestruct 赋值给wave1 或者wave2
4.26修复BUG:
切换通道之后,再次调整参数将会把第一通道的参数带给第二通道;(fixed)
单片机源程序如下:
- #include "stm32f10x.h"
- #include "dac.h"
- #include "stdio.h"
- #include "usart.h"
- #include "led.h"
- #include "timer.h"
- #include "delay.h"
- #include "lcd_driver.h"
- #include "gui.h"
- #include "indkey.h"
- #include "dds.h"
- #include "beep.h"
- struct WaveTypedef wave1 = {
- 10, // freq
- 0.0, // phase
- 0.0, // omega
- AMP_MAX, // Amp
- };
- struct WaveTypedef wave2 = {
- 10, // freq
- 0.0, // phase
- 0.0, // omega
- AMP_MAX, // Amp
- };
- extern uint16_t period;
- extern uint16_t sin_tab[];
- extern uint16_t sin_tab2[];
- int main(void)
- {
- TFT_Init ();
- TFT_ClearScreen(RED);
- GUI_Box (2,2,237,397,BLUE);
- delay_init();
- USART1_Config(115200);
- led_config ();
- Key_IO_Init();
- BEEP_Init();
- dds_gui_init();
- ddswave1_updata_data(&wave1);
- ddswave2_updata_data(&wave2);
-
- TIM1_Init(10000 - 1, TIM_1MHZ_CLK);
-
- TIM3_Init(19,TIM_1MHZ_CLK); //timer clk == 72Mhz / 71+1 == 1Mhz 1clk == 1us
- //timer period == 9 + 1 == 10 clk == 10Us
- TIM4_Init(19,TIM_1MHZ_CLK);
-
- dac_1_init();
- dac_2_init();
-
- TIM_Cmd (TIM1,ENABLE);
- TIM_Cmd (TIM3,ENABLE);
- TIM_Cmd (TIM4,ENABLE);
- printf ("System Init Down!\r\n");
- load_sin_tab(&wave1);
- load_sin_tab2(&wave2);
- while(1)
- {
- GPIO_ResetBits(GPIOC,GPIO_Pin_0);
- GPIO_SetBits(GPIOC,GPIO_Pin_1);
- delay_ms(1000);
- GPIO_SetBits(GPIOC,GPIO_Pin_0);
- GPIO_ResetBits(GPIOC,GPIO_Pin_1);
- delay_ms(1000);
- }
- }
复制代码
所有资料51hei提供下载:
2myDAC_timer-wave-struct.rar
(327.61 KB, 下载次数: 324)
|