久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14077|回復: 22
打印 上一主題 下一主題
收起左側

STM32數字示波器的設計 含Multisim仿真及源碼PCB文件

  [復制鏈接]
跳轉到指定樓層
樓主
/****************************************************************************
* Copyright (C), 奮斗嵌入式工作室
*
* 本例程在 奮斗版STM32開發板V2,V2.1,V3,V5及MINI上調試通過           
*
* 文件名: main.c
* 內容簡述:   
*      
*    演示的是3個藍色LED(LED1-LED3) 輪流閃爍
   
    定義:   
    LED1-LED3 ---V6——V8
    V6----- PB5-LED1
    V7----- PD6-LED2(僅V2,V2.1 V3  V5板)
    V8----- PD3-LED3(僅V2,V2.1 V3  V5板)
   
    基于MDK版本:        3.8
    基于官方外設庫版本: 3.5
*
* 文件歷史:
* 版本號  日期       作者    說明
* v0.2    2011-7-28 sun68  創建該文件
*
*/

STM32 數字示波器的設計示波器AD板.pdf


示波器上層板.pdf



下面是STM32 數字示波器的設計含仿真,及源碼

adc.c文件源碼:
  1. /*---------------------------------------------------------
  2.                   ADC配置驅動程序
  3.         說明: 示波器AD采樣配置,經過初步測試,AD采樣速率為1.286M
  4.               正弦波最大不失真測量頻率300kHz
  5.                   三角波最大不失真測量頻率150kHz
  6.                   矩形波最大不失真測量頻率100kHz
  7.         時間: 2013年11月19日
  8. ---------------------------------------------------------*/
  9. #include "stm32f10x.h"
  10. #include "adc.h"
  11. #include "oscilloscope.h"
  12. #include "ucos_ii.h"
  13. #include "tft_api.h"
  14. /*-----------------------------------------
  15.                             聲明變量
  16. ------------------------------------------*/
  17. extern WaveType WaveInfo;
  18. extern WaveMode WaveCtrl;
  19. volatile u16 ADCConvertedValue[SAMPDEPTH];//AD轉換緩沖區,占用RAM 0.8KB

  20. /*-----------------------------------------
  21.                             ADC1端口初始化
  22. ------------------------------------------*/
  23. void ADC1_GPIO_Init(void)
  24. {
  25.         GPIO_InitTypeDef IO_Init;
  26.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
  27.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC,ENABLE);
  28.         //C1模擬輸入
  29.         IO_Init.GPIO_Pin = GPIO_Pin_1;
  30.         IO_Init.GPIO_Mode = GPIO_Mode_AIN;
  31.         GPIO_Init(GPIOC,&IO_Init);
  32. }

  33. /* #define ADC1_DR_Address ((unsigned int)0x40012400+0x4c) */
  34. /* unsigned short int ADC1_DMA_Value; */
  35. /*--------------------------------------------------
  36. 函數說明:配置ADC1完成AD采集,是本示波器最核心的部分.
  37. 配置方案:ADC1由TIM3提供的觸發事件進行觸發AD轉換,控
  38.                    制TIM3的速率就可以完成采樣率的改變.同時采
  39.                   用DMA完成數據傳輸,注入通道1完成內部溫度傳
  40.                   感器AD采集.
  41. --------------------------------------------------*/
  42. void ADC1_Mode_Config(void)
  43. {
  44.         //配置DMA
  45.         DMA_InitTypeDef DMA_csh;
  46.         ADC_InitTypeDef ADC_csh;
  47.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  48.         NVIC_InitTypeDef NVIC_InitStructure;

  49.         DMA_DeInit(DMA1_Channel1);                                             //DMA復位,通道1
  50.         DMA_csh.DMA_PeripheralBaseAddr = ADC1_DR_Address;  //ADC1地址
  51.         DMA_csh.DMA_MemoryBaseAddr = (unsigned int)ADCConvertedValue;  //內存地址
  52.         DMA_csh.DMA_DIR = DMA_DIR_PeripheralSRC;  
  53.         DMA_csh.DMA_BufferSize = SAMPDEPTH;                                            //緩沖大小為采樣深度
  54.         DMA_csh.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外設地址固定
  55.         DMA_csh.DMA_MemoryInc = DMA_MemoryInc_Enable;                         //內存地址自增
  56.         DMA_csh.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;  
  57.         DMA_csh.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  58.         DMA_csh.DMA_Mode = DMA_Mode_Circular;                                          //循環傳輸
  59.         DMA_csh.DMA_Priority = DMA_Priority_High;                                  //DMA優先級高
  60.         DMA_csh.DMA_M2M = DMA_M2M_Disable;
  61.         DMA_Init(DMA1_Channel1,&DMA_csh);                                                  //寫入DMA1配置參數
  62.         DMA_Cmd(DMA1_Channel1,ENABLE);                                                           //使能DMA1通道1
  63.         DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,ENABLE);                        //使能DMA CH1中斷

  64.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  65.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
  66.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  67.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  68.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  69.         NVIC_Init(&NVIC_InitStructure);

  70.         //配置TIM3工作在18MHz,為AD提供觸發
  71.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  72.         TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  73.         TIM_TimeBaseStructure.TIM_Period = 1;         
  74.         TIM_TimeBaseStructure.TIM_Prescaler = 99;         //工作在18M,每格最大值時,不至于溢出      
  75.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;   
  76.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  77.         TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
  78.         TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Update); //使用TIM3事件更新作為ADC觸發
  79.         
  80.         //配置ADC
  81.         ADC_csh.ADC_Mode = ADC_Mode_Independent;                  //獨立ADC模式
  82.     ADC_csh.ADC_ScanConvMode = DISABLE;                           //關閉掃描模式
  83.         ADC_csh.ADC_ContinuousConvMode = DISABLE;                  //連續AD轉換開啟
  84.         ADC_csh.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;  //由TIM3提供的觸發事件進行觸發AD轉換
  85.         ADC_csh.ADC_DataAlign = ADC_DataAlign_Right;         //數據右對齊
  86.         ADC_csh.ADC_NbrOfChannel = 1;                                          //要轉換的通道數目1
  87.         ADC_Init(ADC1,&ADC_csh);                                                   //寫入ADC1配置參數
  88.         ADC_RegularChannelConfig(ADC1,ADC_Channel_11,1,ADC_SampleTime_1Cycles5);//采樣速率1M
  89.         ADC_DMACmd(ADC1,ENABLE);                                                 //使能ADC1 DMA
  90.         ADC_ExternalTrigConvCmd(ADC1,ENABLE);                        //打開ADC1外部觸發
  91.         
  92.         ADC_InjectedChannelConfig(ADC1,ADC_Channel_16,1,ADC_SampleTime_239Cycles5);         //配置ADC1通道16為注入通道1
  93.         ADC_ExternalTrigInjectedConvConfig(ADC1,ADC_ExternalTrigInjecConv_None);         //軟件觸發注入通道的轉換
  94.         ADC_TempSensorVrefintCmd(ENABLE);                                                                                         //使能溫度傳感器

  95.         ADC_Cmd(ADC1,ENABLE);                                                         //使能ADC1
  96.         ADC_ResetCalibration(ADC1);                                                  //復位校準寄存器
  97.         while(ADC_GetResetCalibrationStatus(ADC1));     //等待校準寄存器復位完成
  98.         ADC_StartCalibration(ADC1);                                                  //開始校準
  99.         while(ADC_GetCalibrationStatus(ADC1));                         //等待校準完成
  100.         TIM_Cmd(TIM3,ENABLE);
  101. }
  102. /*-----------------------------------------
  103. 函數說明:通過注入通道1轉換內部溫度傳感器
  104.                    AD值,讀取10次有效數據取平均返回
  105. ------------------------------------------*/
  106. u16 GetTempSensor(void)   
  107. {
  108.         u16 temp=0,i,k=0;
  109.         for(i=0; i<10; )
  110.         {
  111.                 ADC_SoftwareStartInjectedConvCmd(ADC1,ENABLE);        //軟件觸發注入通道的轉換
  112.                 k = (0x6EE - ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_1)) / 0x05 + 25;
  113.                 if(k>0 && k<100)
  114.                 {
  115.                         temp += k;
  116.                         i++;
  117.                 }
  118.         }
  119.         temp /= 10;
  120.         return temp;            
  121. }
  122. /*-----------------------------------------
  123. 函數說明:ADC1初始化
  124. ------------------------------------------*/
  125. void ADC1_Init(void)
  126. {
  127.         ADC1_GPIO_Init();
  128.         ADC1_Mode_Config();
  129. }
  130. /*-----------------------------------------
  131. 函數說明:ADC傳輸DMA通道1中斷服務程序
  132.                    DMA把AD值傳輸到緩沖區完成后關閉定
  133.                   時器3(作為觸發AD轉換的定時器)同時
  134.                   置更新完成標志位為1,開定時器3在應
  135.                   用中開啟.
  136. ------------------------------------------*/
  137. void DMA1_Channel1_IRQHandler()
  138. {
  139.       OSIntNesting++;  
  140.       DMA_ClearFlag(DMA1_FLAG_TC1);        //清除DMA傳輸完成中斷
  141.       TIM_Cmd(TIM3,DISABLE);                //關閉TIM3
  142.       WaveCtrl.UpdatTrue = 1;                //已經完成一次波形FIFO,可以批量讀出數據
  143.       OSIntExit();
  144. }
  145. /*-----------------------------------------
  146. 函數說明:擦除AD緩沖區
  147. ------------------------------------------*/
  148. void Earse_AD_FIFO(void)
  149. {
  150.         uint32_t i;
  151.          for(i=0; i<SAMPDEPTH; i++)
  152.         {
  153.                 ADCConvertedValue[i] = 0;
  154.         }        
  155. }
復制代碼

主程序:
  1. /*------------------------------------------------------------------------------------
  2.                                                                    STM32示波器
  3. 硬件平臺:
  4.                          主控器: STM32F103ZET6 64K RAM 512K ROM
  5.                         屏幕器: SSD1963
  6.                         分辨率: 480x272 16位色
  7.                    觸摸屏: TSC2046
  8.                         模擬電路: OP  - TL084
  9.                                           OP  - u741
  10.                                           SW  - CD4051
  11.                                           CMP - LM311
  12.                                           PWR - LM7805
  13.                                               - LM7905
  14.                                                   - MC34063
  15.                                                   - AMS1117-3.3
  16.                                           DRI - ULN2003
  17.                         繼電器:信號繼電器
  18.                     電源:   DC +12V

  19. 軟件平臺:
  20.                          開發環境: RealView MDK-ARM uVision4.10
  21.                         C編譯器 : ARMCC
  22.                         ASM編譯器:ARMASM
  23.                         連接器:   ARMLINK
  24.                         實時內核: uC/OS-II 2.90實時操作系統
  25.                         GUI內核 : uC/GUI   3.90圖形用戶接口
  26.                         底層驅動: 各個外設驅動程序
  27.         
  28.         ROM Size = Code + RO-data +RW-data
  29.         RAM Size = RW-data + ZI-data
  30.         Program Size: Code=56024 RO-data=8272 RW-data=256 ZI-data=29912         

  31. 時間: 2013年11月9日       BoX編寫于大二上學期

  32. 版本: V1.0 - 2013/11/9
  33.        V1.1 - 2014/2/8
  34.            V3.0 - 2014/2/19                                
  35. -------------------------------------------------------------------------------------*/   
  36. #include "stm32f10x.h"
  37. #include "ucos_ii.h"
  38. #include "app.h"
  39. #include "GUI.h"

  40. #include "usart1.h"
  41. #include "pincfg.h"
  42. #include "delay.h"
  43. #include "tft_api.h"
  44. #include "dac.h"
  45. #include "adc.h"
  46. #include "iwdg.h"
  47. #include "timer.h"
  48. #include "EXTI.H"
  49. #include "oscilloscope.h"
  50. #include "indkey.h"
  51. #include "tsc2046.h"

  52. #include "task_rtc.h"
  53. #include "task_gui.h"
  54. #include "task_sd.h"


  55. /*-----------------------------------------
  56.                                 聲明起始任務棧
  57. ------------------------------------------*/
  58. OS_STK  Task_Start_Stk[TASK_START_STK_SIZE];

  59. /*-----------------------------------------
  60. 因為涉及到對共享資源的訪問,創建互斥信號量
  61. ------------------------------------------*/
  62. OS_EVENT *LCD_Buffer_MUTEX;
  63. OS_EVENT *USART_Buffer_MUTEX;
  64. OS_EVENT *SDtoRAM_Buffer_MUTEX;
  65. /*-----------------------------------------
  66.                                 主 函 數
  67. ------------------------------------------*/   
  68. int main(void)   
  69. {   
  70.          INT8U err;
  71.      SystemInit();                 //初始化RCC時鐘
  72.          OSInit();
  73.                            
  74.          LCD_Buffer_MUTEX     = OSMutexCreate(4,&err);        //創建3個共享資源互斥信號量
  75.          USART_Buffer_MUTEX   = OSMutexCreate(4,&err);
  76.          SDtoRAM_Buffer_MUTEX = OSMutexCreate(4,&err);
  77.             
  78.      OSTaskCreate(Task_Start,(void *)0,&Task_Start_Stk[TASK_START_STK_SIZE-1],TASK_START_PRIO); //起始任務   
  79.          
  80.          OSStart();      
  81. }
  82. /*-------------------------------------------------------------------------------
  83. 函數功能:初始化各種外設
  84. 說    明:因為跑操作系統,所以外設的初始化應該放在操作系統的初始任務中完成,不能
  85.           在while(1)循環外部完成外設的初始化工作,否則操作系統可能無法啟動.
  86.                   本函數在app.c中被調用
  87. -------------------------------------------------------------------------------*/
  88. void BSP_Init(void)
  89. {
  90.         OS_CPU_SR  cpu_sr = 0u;
  91.         OS_ENTER_CRITICAL();
  92.         DelayInit();                 //初始化延時
  93.         PinCfg();                         //外部器件控制配置
  94.         FSMC_LCD_Init();         //FSMC總線配置                  
  95.         GUI_Init();                         //初始化UCGUI界面
  96.         TSC2046_Config();         //初始化觸摸控制器
  97.         USART1_Config();         //初始化串口
  98.         DAC_Config();                 //初始化DAC1
  99.         ADC1_Init();                 //初始化ADC1
  100.         EXTI_Config();                 //初始化外部中斷
  101.         Key_EXTI_Config();         //初始化按鍵中斷
  102.         TIM5_Config(1999,71);  //TIM5以1MHz頻率計數,每2ms溢出中斷
  103. //        TIM4_Config(59999,71); //TIM4以1MHz頻率計數,每60ms溢出中斷
  104.         RTC_Init();                            //初始化RTC
  105. //        SD_Init();
  106.         JDQ_ACDC = 1;                  //交流耦合
  107.         ManualGainScan(3);    //調試用
  108.         IWDG_Init(4,625);     //喂狗時間為1000ms
  109.         OS_EXIT_CRITICAL();         
  110. }
復制代碼


PCB硬件和Multisim仿真.7z

2.15 MB, 下載次數: 244, 下載積分: 黑幣 -5

硬件設計

程序.7z

1.07 MB, 下載次數: 231, 下載積分: 黑幣 -5

源代碼

評分

參與人數 4黑幣 +70 收起 理由
maxwenn + 5 贊一個!
tieq1952 + 10 很給力!
邰夏留 + 5 共享資料的黑幣獎勵!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏14 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:99525 發表于 2016-10-31 17:25 | 只看該作者
不錯的代碼,回帖支持一下
回復

使用道具 舉報

板凳
ID:146352 發表于 2016-11-5 23:29 | 只看該作者
仿真是用Multisim做的 大神呀
回復

使用道具 舉報

地板
ID:145845 發表于 2016-11-7 23:49 來自觸屏版 | 只看該作者
不錯不錯
回復

使用道具 舉報

5#
ID:95165 發表于 2016-11-21 07:45 | 只看該作者
仿真是Multisim12仿真
PCB是用ad畫的
回復

使用道具 舉報

6#
ID:79034 發表于 2016-11-21 08:24 | 只看該作者
謝謝樓主分享,下載了就頂貼,養成良好的習慣。
回復

使用道具 舉報

7#
ID:194014 發表于 2017-4-27 08:47 | 只看該作者
漂亮,絕對點贊
回復

使用道具 舉報

8#
ID:207830 發表于 2017-6-4 22:21 | 只看該作者
厲害了,大神
回復

使用道具 舉報

9#
ID:213118 發表于 2017-6-20 22:19 | 只看該作者
硬件包含PCB嗎?
回復

使用道具 舉報

10#
ID:94355 發表于 2017-6-22 20:44 | 只看該作者
不錯,回帖支持一下
回復

使用道具 舉報

11#
ID:46986 發表于 2017-6-25 11:27 | 只看該作者
很好,收下來研究一下。
回復

使用道具 舉報

12#
ID:50988 發表于 2017-6-26 21:28 來自觸屏版 | 只看該作者
百度網盤下載鏈接失效了
回復

使用道具 舉報

13#
ID:106195 發表于 2017-9-1 17:50 | 只看該作者
雖然看不懂,但支持一下。
回復

使用道具 舉報

14#
ID:253767 發表于 2017-12-21 14:56 | 只看該作者
已經下載,參照制作
回復

使用道具 舉報

15#
ID:265966 發表于 2017-12-25 11:51 | 只看該作者
好東東
回復

使用道具 舉報

16#
ID:272953 發表于 2018-1-8 10:52 | 只看該作者
樓主你好,能不能介紹一下仿真,我不是很明白看的。。。。
回復

使用道具 舉報

17#
ID:309841 發表于 2018-4-17 10:15 | 只看該作者
大神,帖子不錯,正在照著做
回復

使用道具 舉報

18#
ID:316478 發表于 2018-4-25 18:59 | 只看該作者
有沒有仿真結果?
回復

使用道具 舉報

19#
ID:300696 發表于 2018-6-12 09:23 | 只看該作者
很好的,謝謝了.
回復

使用道具 舉報

20#
ID:283462 發表于 2018-6-12 13:17 | 只看該作者
看了,比較好玩的,有時間玩玩
回復

使用道具 舉報

21#
ID:220748 發表于 2018-12-12 21:54 | 只看該作者
1:后綴 .pcbdoc文件用什么軟件打開?
2:后綴 .ms12文件用什么軟件打開?
回復

使用道具 舉報

22#
ID:411570 發表于 2020-10-7 17:39 | 只看該作者
高手啊!
回復

使用道具 舉報

23#
ID:114240 發表于 2022-5-10 12:08 | 只看該作者
兩個壓縮包里面都沒有仿真啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 五月婷色 | 亚洲人成在线观看 | 九九免费视频 | 日韩欧美三区 | 亚洲二区视频 | 99精品成人 | 亚洲精品久久久久久久久久久 | 伊人久久av | 精品第一页 | 成人精品免费 | 日日干日日 | 日本黄色免费视频 | 成人激情视频网 | 精品国产一区二区在线观看 | 黄色大毛片 | 99在线视频免费观看 | 一区二区三区国产精品 | 欧洲一级毛片 | 一级毛片黄色 | 欧美一级做性受免费大片免费 | 欧美精品区 | 91精品国产乱码久久久 | 91超碰人人| 99国产免费 | 在线看黄色片 | av自拍偷拍 | 色一情一乱一伦一区二区三区 | 久久国产精品99久久人人澡 | 91天堂网| 国产欧美成人 | 最新国产精品 | 天天爽| 日韩欧美网站 | 国产极品国产极品 | 二区在线观看 | 国产精品成人在线观看 | 国产在线欧美 | 国产区在线视频 | 亚洲av毛片成人精品 | 国产亚洲一区二区三区 | 国产理论片 |