畢設做的是基于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)
2018-5-12 17:49 上傳
點擊文件名下載附件
源代碼 下載積分: 黑幣 -5
|