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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

全國電賽電源類題目stm32驅動 附源程序

  [復制鏈接]
跳轉到指定樓層
樓主
國賽stm32電源類題目的解答,下面是程序源碼的介紹:
1.STM32的主頻為72M 在定時器中計算定時時長要用到 72M/((分頻+1)*(自動重裝載+1))
2.IO口的工作方式主要是推挽輸出(沒有特殊要求時)  浮空輸入(外部中斷,計數器等)  復用(如定時器輸出pwm)  
3.SPI串行通信時注意空閑時電平高低和在哪點觸發,SDO腳是GPIO_Mode_IPU好像浮空也行,可以嘗試下  如果要在程序中修改SPI的觸發
方式等  要先cmd  disable  然后再修改CR1寄存器的值  
4.AD和DA的供電是5V  要外接電源  USB供電只有3.3
5.顯示盡量放優先級最低的中斷,中斷處理注意清除標志位
6.能不用delay就不要用,它會占用CPU做無用功
7.本例程中的各種變量未明確說明自己看程序研究,還有觸摸只是玩玩的,要做觸摸控制自己研究,另外外部中斷該程序中未加,
根據需要自己加進去,注意包含IO口,EXIT和NVIC及中斷處理
8.程序中很多功能注釋掉了,自己取消注釋看著用

    Write  By  XHJ


stm32單片機源程序如下:
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "lcd.h"
  4. #include "usart.h"          
  5. #include "math.h"
  6. #include "AD&DA.h"
  7. #include  "Tim.h"
  8. /***************Write By XHJ******************/
  9. u16 AD_Buffer_Rx[8];
  10. __IO uint64_t IC2Value = 0;
  11. __IO uint64_t DutyCycle = 0;
  12. __IO uint64_t Frequency = 0;
  13. __IO uint64_t IC1Value = 0;
  14. __IO uint64_t DutyCycle1 = 0;
  15. __IO uint64_t Frequency1 = 0;

  16. uint64_t capture_Times,A,SHI,GE;
  17. uint64_t total_Time,total_Time1;
  18. uint64_t low_Time,low_Time1;
  19. u32 SIN_LUT_index = 0;
  20. u32 Cnt_Dir = 0;
  21. double Sin_Lut[360]= {0};
  22. double Sin_Lut2[360]= {0};
  23. double Sin_Lut3[360]= {0};
  24. u8 LowRangeFlag= 0;
  25. u8 HighRangeFlag= 0;
  26. u16 SetUpPara= 1;
  27. u16 amp = 1000;
  28. u16 fqc = 5;                //fqc為正弦調幅波頻率的1/10,單位Hz。
  29. u16 fz = 15;                //fz為載波頻率,單位kHz。
  30. u16 fe=10,flag=0,psc;
  31. u16 count=0; //計數值

  32. uint8_t TxBuffer1[] = "USART Interrupt Example: This is USART1 DEMO";  
  33. uint8_t RxBuffer1[],rec_f,tx_flag,RxCounter1;
  34. #define PWMSetUpMax 2000
  35. /***********初始化生成sin數組****************/
  36. void SPWM_Init( void )
  37. {
  38.         u16 i;
  39.         for( i=0; i<360; i++) //A
  40.         {
  41.                 Sin_Lut[i] = 100*cos(2*3.1415926*i/360.0);
  42.         }
  43.         for( i=0; i<360; i++) //B
  44.         {
  45.                 Sin_Lut2[i] = 100*cos(2*3.1415926*(i-120)/360.0);
  46.         }   
  47.         for( i=0; i<360; i++) //C
  48.         {
  49.                 Sin_Lut3[i] = 100*cos(2*3.1415926*(i+120)/360.0);
  50.         }  
  51. }

  52. int main(void)
  53. {         
  54.          int i=1000;
  55.          delay_init();                     //延時函數初始化          
  56.          SPI1_Init();        //LCD SPI1初始化(包含各種時鐘初始化)
  57.          //uart3_init(9600);                 //串口初始化為9600
  58.          LCD_MyInit();          //LCD 初始化
  59.          SPI_Configuration();  //AD DA配置初始化 SPI2和GPIO
  60.    POINT_COLOR=RED;//設置字體為紅色
  61.          BACK_COLOR=WHITE;//背景白色
  62.          DAC7565_Init();  //DA初始化
  63.          //SPWM_Init( );    //sin數組初始化
  64.          //TIM_Configuration(); //定時器及中斷向量配置
  65.          //TIM_Cmd(TIM1,ENABLE);    //打開定時器1
  66.          /* TIM1 Main Output Enable */
  67.    //TIM_CtrlPWMOutputs(TIM1, ENABLE);
  68.          //TIM_Cmd(TIM2,ENABLE);    //打開定時器2
  69.          //TIM_Cmd(TIM3,ENABLE);         //打開定時器3
  70.          //TIM_Cmd(TIM4,ENABLE);         //打開定時器4
  71.          //設定AD值
  72.          Set_DAValue(0,4000);
  73.          Set_DAValue(1,3062);
  74.    Set_DAValue(2,2048);
  75.    Set_DAValue(3,1024);       

  76.         while(1)
  77.         {          
  78.                 i++;
  79.                 AD_Convert();          //AD轉換       
  80.           LCD_ShowNum(0,0,AD_Buffer_Rx[0],5,16);  //顯示AD值
  81.           LCD_ShowNum(0,100,AD_Buffer_Rx[1],5,16);
  82.           LCD_ShowNum(0,200,AD_Buffer_Rx[2],5,16);
  83.           LCD_ShowNum(0,300,AD_Buffer_Rx[3],5,16);
  84.                 delay_ms(500);
  85.                 Set_DAValue(0,2000);
  86.                
  87. //                 psc=648648/fe;
  88. //                 TIM1->PSC=psc;           //預分頻設置
  89. //                 if(flag==0)
  90. //                  {
  91. //            fe+=10;
  92. //                 if(fe>=30000){flag=1;}       
  93. //                  }
  94. //                  if(flag==1)
  95. //                  {
  96. //            fe-=10;
  97. //                 if(fe<=10){flag=0;}       
  98. //                  }
  99. //                 count=TIM2->CNT;
  100.                

  101.         }
  102. }

  103. /***********T2中斷處理SPWM***********/
  104. void TIM2_IRQHandler(void)  
  105. {
  106.           
  107.            TIM_Cmd(TIM1,DISABLE);    //關閉定時器1
  108. //           if( SIN_LUT_index == 360 )
  109. //         {
  110. //           SIN_LUT_index= 0;
  111. //         }

  112. //         TIM1->CCR1 = (u16)((18000/fz)-amp*Sin_Lut[SIN_LUT_index]*SetUpPara/PWMSetUpMax/1000.0);
  113. //         TIM1->CCR2 = (u16)((18000/fz)-amp*Sin_Lut2[SIN_LUT_index]*SetUpPara/PWMSetUpMax/1000.0);
  114. //         TIM1->CCR3 = (u16)((18000/fz)-amp*Sin_Lut3[SIN_LUT_index]*SetUpPara/PWMSetUpMax/1000.0);

  115. //         SIN_LUT_index++;
  116. //         if( SetUpPara < PWMSetUpMax )
  117. //         {
  118. //           SetUpPara++;
  119. //         }
  120.           TIM_ClearFlag(TIM2,TIM_FLAG_Update);        //中斷標志位清零
  121. }
  122. /***********T3中斷處理***********/
  123. void TIM3_IRQHandler(void)  
  124. {
  125.            if(flag==0)
  126.                 {
  127.           fe+=10;
  128.                 if(fe>=20000){flag=1;}       
  129.                 }
  130.                 if(flag==1)
  131.                 {
  132.           fe-=10;
  133.                 if(fe<=10){flag=0;}       
  134.                 }
  135.                 psc=654545/fe;
  136.                 TIM1->PSC=psc;           //預分頻設置
  137.           TIM_ClearFlag(TIM3,TIM_FLAG_Update);        //中斷標志位清零
  138. }
  139. /***********T4輸入捕獲***********/
  140. void TIM4_IRQHandler(void)
  141. {
  142.   if (TIM_GetITStatus(TIM4, TIM_IT_CC2) != RESET)
  143.         {
  144.                 /* Clear TIM8 Capture compare interrupt pending bit */
  145.                 TIM_ClearITPendingBit(TIM4, TIM_IT_CC2);
  146.                
  147.                 /* Get the Input Capture value */
  148.                 IC2Value =TIM_GetCapture2(TIM4);
  149.                
  150.                 if (IC2Value != 0)
  151.                 {
  152.                         /* Duty cycle computation */
  153.                           total_Time=IC2Value;
  154.                           //low_Time=TIM_GetCapture1(TIM4);
  155.                           //DutyCycle=(low_Time+1)*100/total_Time;
  156.                           //SHI=DutyCycle;
  157.                           low_Time=0;
  158.                           total_Time=0;
  159.                     /* Frequency computation */
  160.                     Frequency = SystemCoreClock/IC2Value/720;          //72M/(TIM_Prescaler+1)/IC2Value
  161.                 }
  162.                 else
  163.                 {
  164.                     DutyCycle = 0;
  165.                     Frequency = 0;
  166.                 }
  167.   }       
  168.         if (TIM_GetITStatus(TIM4, TIM_IT_CC1) != RESET)
  169.         {
  170.                 /* Clear TIM8 Capture compare interrupt pending bit */
  171.                 TIM_ClearITPendingBit(TIM4, TIM_IT_CC1);
  172.                
  173.                 /* Get the Input Capture value */
  174. ……………………

  175. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
STM32F103SimpleDemo.rar (389.62 KB, 下載次數: 130)



評分

參與人數 2黑幣 +10 收起 理由
1172025273 + 5 贊一個!
墨非魚 + 5 很給力!

查看全部評分

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

使用道具 舉報

沙發
ID:94949 發表于 2017-7-20 15:23 | 只看該作者
寫的很好
回復

使用道具 舉報

板凳
ID:223441 發表于 2017-7-30 22:38 | 只看該作者
你好。我在論壇看到了你的SPWM程序,我想詢問你下,就是我想改成輸出頻率為50HZ的話,要怎么去改,還有,載波頻率的話,要怎么去理解?希望你抽空回復我一下。
回復

使用道具 舉報

地板
ID:225258 發表于 2017-8-6 18:03 | 只看該作者
謝謝、
回復

使用道具 舉報

5#
ID:225258 發表于 2017-8-6 18:04 | 只看該作者
寫的很好、
回復

使用道具 舉報

6#
ID:225299 發表于 2017-8-6 21:06 | 只看該作者
很想要,可是金幣不夠
回復

使用道具 舉報

7#
ID:417314 發表于 2018-10-29 15:49 | 只看該作者
非常實用
回復

使用道具 舉報

8#
ID:417314 發表于 2018-12-6 15:07 | 只看該作者
樓主能上傳一波硬件圖么,DAC7565轉換輸出沒反應,跪求
回復

使用道具 舉報

9#
ID:511461 發表于 2019-5-18 11:36 | 只看該作者
這是哪年的國賽題
回復

使用道具 舉報

10#
ID:487825 發表于 2019-6-15 22:14 | 只看該作者
DAC7565的程序能上傳CSDN一份嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美福利 | 国产精品久久久久久久一区探花 | 国产精品无码久久久久 | 琪琪午夜伦伦电影福利片 | 毛片的网址| 国产黄色在线观看 | 九九亚洲 | 国产日韩视频 | 毛片网站在线观看视频 | 一级在线| www.青青草| 国内精品视频一区二区三区 | 精品无码久久久久久国产 | 日本淫视频 | 欧美一区二区三区视频在线观看 | 欧美一区二区免费电影 | 日韩在线视频观看 | 亚洲欧美在线一区 | 中文字幕第一页在线 | 国产精品99 | 免费性视频 | 成人免费视频在线观看 | 亚洲黄色一区二区三区 | 色av一区| 日韩看片 | 国产精品久久久久久吹潮日韩动画 | 欧美黄色片 | 日本福利片 | 欧美精品久久久久久 | 黄色在线免费观看视频 | 中文字幕一区二区三区四区五区 | 一区二区三区四区不卡视频 | 一区二区在线 | 欧美久久久久久 | 99久久精品国产一区二区三区 | 久久久久国产一区二区三区四区 | 成人羞羞国产免费视频 | 国产精品美女久久久久久免费 | 99精品免费在线观看 | 一区二区三区四区电影视频在线观看 | 99精品国产一区二区三区 |