找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1934|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STM32的示波器開發(fā)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:492572 發(fā)表于 2019-3-21 16:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
今年在做單片機(jī)項(xiàng)目,是一個(gè)基于labview的虛擬示波器,程序全部開源 可供大家下載

所有資料51hei提供下載:
數(shù)字存儲(chǔ)示波器.7z (1.25 MB, 下載次數(shù): 24)

單片機(jī)源程序如下:
  1. #include "stm32f10x.h"          
  2. #include <stdio.h>
  3. #include "usart.h"
  4. #include "touch_panel.h"
  5. #include "systick.h"
  6. #include "tft_lcd.h"
  7. #include "back_light.h"
  8. #include "oscilloscope.h"
  9. #include "button.h"
  10. #include "wave_maker.h"

  11. /*******************************************************************************
  12.         函數(shù)名:main
  13.         輸  入:        void
  14.         輸  出:        int
  15.         功  能:用戶程序入口
  16. ********************************************************************************/
  17. int main(void)
  18. {                                                                                  
  19.         SystemInit();                                                   //系統(tǒng)初始化
  20.         TP_Configuration();                                           //觸摸屏初始化
  21.         USART_Configuration();                                   //串口初始化
  22.         ButtonInit();                                                   //按鍵初始化
  23.         SysTick_Config(SystemFrequency / 1000);//滴答時(shí)鐘配置,1MS進(jìn)入中斷一次


  24.         OscilloscopeMain();       
  25. }



  26. #ifdef  USE_FULL_ASSERT

  27. /**
  28.   * @brief  Reports the name of the source file and the source line number
  29.   *   where the assert_param error has occurred.
  30.   * @param  file: pointer to the source file name
  31.   * @param  line: assert_param error line source number
  32.   * @retval None
  33.   */
  34. void assert_failed(uint8_t* file, uint32_t line)
  35. {
  36.   /* User can add his own implementation to report the file name and line number,
  37.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  38.   /* Infinite loop */
  39.   while (1)
  40.   {
  41.   }
  42. }
  43. #endif

  44. /**
  45.   * @}
  46.   */

  47. /**
  48.   * @}
  49.   */

  50. /******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
復(fù)制代碼

  1. #include "stm32f10x.h"
  2. #include <stdio.h>
  3. #include "systick.h"
  4. #include "wave_maker.h"

  5. //波形由PA4輸出, PA4 用作 DAC_OUT1, DAC的參考電壓 = 3.3V
  6. //正弦波
  7. const uint16_t g_Sine32[32] =
  8. {
  9. 2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056,
  10. 3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909,
  11. 599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647
  12. };
  13. //方波
  14. const uint16_t g_Square32[32] =
  15. {
  16. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  17. 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095,
  18. 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095
  19. };
  20. uint16_t g_Wave[32];

  21. /*******************************************************************************
  22.         函數(shù)名:WaveMakerInit
  23.         輸  入:void
  24.         輸  出:void
  25.         功  能:初始化波形發(fā)生器。
  26.                         配置PA4 為DAC_OUT1, 啟用DMA2
  27. *******************************************************************************/
  28. void WaveMakerInit(void)
  29. {

  30.         uint32_t i;

  31.         for (i = 0; i < 32; i++)
  32.         {
  33.                 g_Wave[i] = g_Sine32[i] * 0.606;  //調(diào)整正弦波幅度
  34.         }

  35.         {
  36.                 //配置時(shí)鐘
  37.                 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);       
  38.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  39.                 RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  40.                 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
  41.         }
  42.         {       
  43.                 //配置GPIO
  44.                 GPIO_InitTypeDef GPIO_InitStructure;
  45.                 GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4;           //配置PA4為DAC_OUT1
  46.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  47.                 GPIO_Init(GPIOA, &GPIO_InitStructure);
  48.          }
  49.        
  50. #if 1
  51.         {
  52.                 //配置TIM6
  53.                 TIM_PrescalerConfig(TIM6, 0, TIM_PSCReloadMode_Update);
  54.                 //決定DAC輸出的采樣頻率 , x = 72000000 / 頻率
  55.                 //TIM_SetAutoreload(TIM6, 562);           //562 輸出1KHz的正弦波
  56.                 //TIM_SetAutoreload(TIM6, 22);           //22 輸出100KHz的正弦波
  57.                 TIM_SetAutoreload(TIM6, 220);           //22 輸出10KHz的正弦波
  58.                 TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update); //更新事件被用作觸發(fā)輸出
  59.         }
  60. #else
  61.         {
  62.                 //配置TIME2
  63.                 TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;
  64.                  
  65.                 TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  66.                 TIM_TimeBaseStructure.TIM_Period = 0x19;         
  67.                 TIM_TimeBaseStructure.TIM_Prescaler = 0x0;      
  68.                 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;   
  69.                 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  70.                 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  71.                
  72.                 TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);//更新事件被用作輸出觸發(fā)          
  73.         }
  74. #endif

  75.         {
  76.                 //配置DAC_1
  77.                 DAC_InitTypeDef DAC_InitStructure;

  78.                 DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;
  79.                 //DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;
  80.                 DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
  81.                 DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
  82.                 DAC_Init(DAC_Channel_1, &DAC_InitStructure);
  83.         }
  84.        
  85.         for (i = 0; i < 32; i++)
  86.         {
  87.                 g_Wave[i] = g_Sine32[i] * 0.606;//調(diào)整正弦波幅度
  88.         }
  89.        
  90.         {
  91.                 //配置DMA2_3
  92.                 DMA_InitTypeDef DMA_InitStructure;
  93.        
  94.                 DMA_DeInit(DMA2_Channel3);
  95.                 DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1_Address;
  96.                 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&g_Wave;
  97.                 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
  98.                 DMA_InitStructure.DMA_BufferSize = 32;
  99.                 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  100.                 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  101.                 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  102.                 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  103.                 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  104.                 DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  105.                 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  106.                 DMA_Init(DMA2_Channel3, &DMA_InitStructure);

  107.                 DMA_Cmd(DMA2_Channel3, ENABLE);
  108.         }

  109.         DAC_Cmd(DAC_Channel_1, ENABLE);
  110.         DAC_DMACmd(DAC_Channel_1, ENABLE);
  111.         TIM_Cmd(TIM6, ENABLE);
  112.         //TIM_Cmd(TIM2, ENABLE);
  113. }

  114. /************************************************************************
  115.         函數(shù)名:SetWaveType
  116.         輸  入:波形
  117.         輸  出:void
  118.         功  能:設(shè)置輸出的波形
  119. ************************************************************************/
  120. void SetWaveType(uint8_t _type)
  121. {
  122.         /*
  123.                 計(jì)算波形幅度。
  124.                 DAC寄存器最大值 4096 對(duì)應(yīng)3.3V

  125.                 我們期望獲得2V的幅度,系數(shù) = 0.606
  126.                 4096 * 0.606 = 2482
  127.         */
  128.         TIM_Cmd(TIM6, DISABLE);
  129.         switch(_type)
  130.         {
  131.                 case SINE:            //正弦波
  132.                         {
  133.                                 uint32_t i;
  134.                                 for (i = 0; i < 32; i++)
  135.                                 {
  136.                                         g_Wave[i] = g_Sine32[i] * 0.606;//調(diào)整正弦波幅度
  137.                                 }

  138.                         }
  139.                         break;

  140.                 case SQUARE:        //方波
  141.                         {
  142.                                 uint32_t i;

  143.                                 for (i = 0; i < 32; i++)
  144.                                 {
  145.                                         g_Wave[i] = g_Square32[i] * 0.606;
  146.                                 }

  147.                         }
  148.                         break;
  149.         }
  150.     TIM_Cmd(TIM6, ENABLE);
  151. }
復(fù)制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:328014 發(fā)表于 2019-3-22 01:02 | 只看該作者
壓縮包里面只有程序 沒有原理圖?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表