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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

2018電賽程序 測量頻率及幅度的STM32F103系列的程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:304013 發(fā)表于 2018-7-21 19:38 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
此程序僅供大家參考

Stm32_template_輸入捕獲最終
  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "12864.h"
  4. #include "stdio.h"
  5. #include "usart.h"
  6. #include "sys.h"




  7. u8  TIM3CH1_CAPTURE_STA=0;        //輸入捕獲狀態(tài)
  8. //[7]:捕獲兩個上升沿
  9. //[6]:捕獲到第一個上升沿                                                  
  10. //[5:0]:溢出計(jì)時器

  11. u32        TIM3CH1_CAPTURE_VAL;        //輸入捕獲值


  12. void TIM2_PWMconf(u16 arr,u16 psc);
  13. void TIM3_Cap_Init(u16 arr,u16 psc);
  14. void MY_GPIO(void);

  15. /***********************main***************************
  16. 函數(shù):main
  17. 描述:
  18. ******************************************************/
  19. u8 flag,flag2;
  20. int main(void)
  21. {               
  22.         u32 temp=0,freqdisplay=0;
  23.         double freq,temp1;
  24.         GPIO_InitTypeDef mygpio;
  25.         delay_init();
  26.         NVIC_Configuration();
  27.         uart_init(9600);
  28.         Lcd12864_init();
  29.         lcd_clr();
  30.         MY_GPIO();
  31.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  32.         mygpio.GPIO_Mode=GPIO_Mode_Out_PP;
  33.         mygpio.GPIO_Pin=GPIO_Pin_0;
  34.         mygpio.GPIO_Speed=GPIO_Speed_50MHz;
  35.         GPIO_Init(GPIOA,&mygpio);       
  36.         Display();
  37.         TIM2_PWMconf(899,5555);            //不分頻。PWM頻率=72000/(899+1)=80Khz               
  38.         TIM3_Cap_Init(0xffff,72-1);        //以1Mhz的頻率計(jì)數(shù)  
  39.   while(1)
  40.         {       
  41.                 //delay_ms(10);
  42.                 if(TIM3CH1_CAPTURE_STA&0X80)     //成功捕獲到了一次上升沿
  43.                 {
  44.                         temp1=TIM3CH1_CAPTURE_STA&0X3F;
  45.                         printf("周期0:%f us\r\n",temp1);
  46.                         //freq=temp1;
  47.                         temp1*=65536;                   //溢出時間總和
  48.                         //printf("周期1:%f us\r\n",temp1);
  49.                         //temp1+=2.5;
  50.                         temp1+=TIM3CH1_CAPTURE_VAL;     //得到總的高電平時間
  51.                         //printf("周期2:%d us\r\n",TIM3CH1_CAPTURE_VAL);
  52.                         //printf("周期3:%f us\r\n",temp1);
  53.                         //temp1*=1000;
  54.                         temp=temp1;
  55.                         freq=1000000.0/temp;                                         
  56.                         addr_choose(2,0);
  57.                         Write_data_12864(0x30+temp/100000);
  58.                         Write_data_12864(0x30+temp%100000/10000);
  59.                         Write_data_12864(0x30+temp%10000/1000);
  60.                         Write_data_12864(0x2e);
  61.                         Write_data_12864(0x30+temp%1000/100);
  62.                         Write_data_12864(0x30+temp%100/10);
  63. //                        Write_data_12864(0x30+temp%10000/1000);
  64. //                        Write_data_12864(0x30+temp%100/10);
  65.                         Write_data_12864(0x30+temp%10);
  66.                         //printf("頻率:%f us\r\n",freq);         //打印總的高點(diǎn)平時間
  67. //                        freqdisplay=freq;
  68. //                        addr_choose(4,0);
  69. //                        Write_data_12864(0x30+freqdisplay/100000);
  70. //                  Write_data_12864(0x30+freqdisplay%100000/10000);
  71. //                        Write_data_12864(0x30+freqdisplay%10000/1000);
  72. //                        Write_data_12864(0x2e);
  73. //                        Write_data_12864(0x30+freqdisplay%1000/100);
  74. //                        Write_data_12864(0x30+freqdisplay%100/10);
  75. //                        Write_data_12864(0x30+freqdisplay%10);
  76.                         freqdisplay=freq*1000;
  77.                         addr_choose(4,0);
  78.                         Write_data_12864(0x30+freqdisplay/100000000);
  79.                   Write_data_12864(0x30+freqdisplay%100000000/10000000);
  80.                         Write_data_12864(0x30+freqdisplay%10000000/1000000);
  81.                         Write_data_12864(0x2e);
  82.                         Write_data_12864(0x30+freqdisplay%1000000/100000);
  83.                         Write_data_12864(0x30+freqdisplay%100000/10000);
  84.                         Write_data_12864(0x30+freqdisplay%10000/1000);
  85.                         Write_data_12864(0x30+freqdisplay%1000/100);
  86.                         Write_data_12864(0x30+freqdisplay%100/10);
  87.                         Write_data_12864(0x30+freqdisplay%10);
  88.                         TIM3CH1_CAPTURE_STA=0;         //開啟下一次捕獲

  89.                 }
  90.         }
  91. }


  92. void MY_GPIO(void)
  93. {
  94.         GPIO_InitTypeDef MY_GPIO;
  95.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  96.        
  97.         MY_GPIO.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_0;
  98.         MY_GPIO.GPIO_Mode=GPIO_Mode_Out_PP;
  99.         MY_GPIO.GPIO_Speed= GPIO_Speed_50MHz;
  100.   GPIO_Init(GPIOB,&MY_GPIO);

  101. }




  102. void TIM2_PWMconf(u16 arr,u16 psc)
  103. {
  104.         GPIO_InitTypeDef mygpio;
  105.         TIM_TimeBaseInitTypeDef mytimebase;
  106.         TIM_OCInitTypeDef  mytimeOC;
  107.        

  108.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        //使能定時器2時鐘
  109.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  //使能AFIO復(fù)用功能模塊時鐘
  110.        
  111.         mygpio.GPIO_Mode=GPIO_Mode_AF_PP;//復(fù)用輸出
  112.         mygpio.GPIO_Pin=GPIO_Pin_1;//CH2
  113.         mygpio.GPIO_Speed=GPIO_Speed_50MHz;
  114.         GPIO_Init(GPIOA,&mygpio);
  115.          
  116.         //初始化TIM2
  117.         mytimebase.TIM_CounterMode=TIM_CounterMode_Up;//向上計(jì)數(shù)
  118.         mytimebase.TIM_Period=arr;
  119.         mytimebase.TIM_Prescaler=psc;
  120.         mytimebase.TIM_ClockDivision=TIM_CKD_DIV1;
  121.         TIM_TimeBaseInit(TIM2,&mytimebase);
  122.         //初始化TIM2 Channel2 PWM模式         
  123.        
  124.         mytimeOC.TIM_OCMode=TIM_OCMode_PWM1;//pwm1 模式
  125.         mytimeOC.TIM_OCPolarity=TIM_OCPolarity_High;//輸出極性高
  126.         mytimeOC.TIM_OutputState=TIM_OutputState_Enable; //比較輸出使能
  127.         TIM_OC2Init(TIM2,&mytimeOC);// TIM2 OC2初始化
  128.        
  129.         TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM2在CCR2上的預(yù)裝載寄存器
  130.        
  131.         TIM_Cmd(TIM2,ENABLE);//使能TIM2
  132.        
  133.         TIM_SetCompare2(TIM2,450);//CCR2值
  134. }


  135. void TIM3_Cap_Init(u16 arr,u16 psc)
  136. {
  137.         GPIO_InitTypeDef mygpio;
  138.         TIM_TimeBaseInitTypeDef mytimebase;
  139.         TIM_ICInitTypeDef myic;
  140.         NVIC_InitTypeDef mynvic;
  141.        
  142.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //使能定時器3時鐘
  143.        
  144.         mygpio.GPIO_Mode=GPIO_Mode_IPD; //設(shè)置成下拉輸入 空閑時電平
  145.         mygpio.GPIO_Pin=GPIO_Pin_6;
  146.         GPIO_Init (GPIOA,&mygpio);
  147.         GPIO_ResetBits(GPIOA,GPIO_Pin_6);
  148.         //初始化 定時器3 TIM3
  149.         mytimebase.TIM_Period=arr;
  150.         mytimebase.TIM_Prescaler=psc;
  151.         mytimebase.TIM_CounterMode=TIM_CounterMode_Up;
  152.         mytimebase.TIM_ClockDivision=TIM_CKD_DIV1;
  153.         TIM_TimeBaseInit(TIM3,&mytimebase);
  154.        
  155.         //初始化TIM3 輸入捕獲參數(shù)
  156.         myic.TIM_Channel=TIM_Channel_1;
  157.         myic.TIM_ICPolarity=TIM_ICPolarity_Rising;
  158.         myic.TIM_ICSelection=TIM_ICSelection_DirectTI;
  159.         myic.TIM_ICPrescaler=TIM_ICPSC_DIV1;
  160.         myic.TIM_ICFilter=0x00;
  161.         TIM_ICInit(TIM3,&myic);
  162.        
  163.         //中斷分組初始化
  164.         mynvic.NVIC_IRQChannel=TIM3_IRQn ;
  165.         mynvic.NVIC_IRQChannelPreemptionPriority=2;
  166.         mynvic.NVIC_IRQChannelSubPriority=0;
  167.         mynvic.NVIC_IRQChannelCmd=ENABLE;
  168.         NVIC_Init(&mynvic);
  169.        

  170.         TIM_ITConfig(TIM3,TIM_IT_CC1|TIM_IT_Update,ENABLE);
  171.         TIM_Cmd(TIM3,ENABLE);
  172.        
  173.        
  174. }


  175.   
  176. void TIM3_IRQHandler(void)
  177. {
  178.         if((TIM3CH1_CAPTURE_STA&0X80)==0)//還未成功捕獲       
  179.         {          
  180.                 if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)         
  181.                         {            
  182.                                 if(TIM3CH1_CAPTURE_STA&0X40)//已經(jīng)捕獲到高電平了
  183.                                         {
  184.                                                 if((TIM3CH1_CAPTURE_STA&0X3F)==0X3F)//高電平太長了
  185.                                                         {
  186.                                                                 TIM3CH1_CAPTURE_STA|=0X80;//標(biāo)記成功捕獲了一次
  187.                                                                 TIM3CH1_CAPTURE_VAL=0XFFFF;
  188.                                                         }
  189.                                                 else
  190.                                                                 TIM3CH1_CAPTURE_STA++;
  191.                                         }         
  192.                         }
  193.                
  194.                 if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET)//捕獲1發(fā)生捕獲事件
  195.                 {       
  196.               if(TIM3CH1_CAPTURE_STA&0X40)                //捕獲到一個上升沿                
  197.                                 {                                 
  198.                                                 TIM3CH1_CAPTURE_STA|=0X80;                //標(biāo)記成功捕獲到一次上升沿
  199.                                                 TIM3CH1_CAPTURE_VAL=TIM_GetCounter(TIM3);
  200.                                 }
  201.                                 else                                     //還未開始,第一次捕獲上升沿
  202.                                 {
  203.                                                 TIM3CH1_CAPTURE_STA=0;                        //清空
  204.                                                 TIM3CH1_CAPTURE_VAL=0;
  205.                                                 TIM_SetCounter(TIM3,0);
  206.                                                 TIM3CH1_CAPTURE_STA|=0X40;                //標(biāo)記捕獲到了上升沿
  207.                                 }                                       
  208.                 }
  209.         }

  210.         TIM_ClearITPendingBit(TIM3, TIM_IT_CC1|TIM_IT_Update); //清除中斷標(biāo)志位

  211. }



復(fù)制代碼

全部資料51hei下載地址:
測頻率LCD12864.rar (302.78 KB, 下載次數(shù): 163)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:288398 發(fā)表于 2018-7-22 13:57 來自手機(jī) | 只看該作者
樓主大佬
回復(fù)

使用道具 舉報(bào)

板凳
ID:334796 發(fā)表于 2018-7-22 15:38 來自手機(jī) | 只看該作者
成功了嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:484657 發(fā)表于 2019-4-14 20:52 | 只看該作者
您好,12864數(shù)據(jù)口和stm32具體的連線程序中有說明嗎,謝謝
回復(fù)

使用道具 舉報(bào)

5#
ID:513359 發(fā)表于 2019-4-16 10:21 | 只看該作者
感謝大佬
回復(fù)

使用道具 舉報(bào)

6#
ID:511461 發(fā)表于 2019-4-17 13:37 | 只看該作者
請問這個是哪個型號的單片機(jī),迷你版還是戰(zhàn)艦版,
回復(fù)

使用道具 舉報(bào)

7#
ID:511461 發(fā)表于 2019-4-17 13:41 | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

8#
ID:286252 發(fā)表于 2019-4-18 09:57 | 只看該作者
通過捕獲電平的長度可以達(dá)到精度要求嗎?
回復(fù)

使用道具 舉報(bào)

9#
ID:512017 發(fā)表于 2019-5-14 01:54 | 只看該作者
樓主編譯時出現(xiàn)了這樣的錯誤
..\Output\stm32_DEMO.axf: error: L6031U: Could not open scatter description file ..\Output\stm32_DEMO.sct: No such file or directory
Not enough information to list image symbols.
Not enough information to list the image map.
回復(fù)

使用道具 舉報(bào)

10#
ID:512017 發(fā)表于 2019-5-31 13:48 | 只看該作者
pwm123 發(fā)表于 2019-5-14 01:54
樓主編譯時出現(xiàn)了這樣的錯誤
..\Output\stm32_DEMO.axf: error: L6031U: Could not open scatter descript ...

linker 里面刪掉路徑
回復(fù)

使用道具 舉報(bào)

11#
ID:512017 發(fā)表于 2019-5-31 13:48 | 只看該作者
pwm123 發(fā)表于 2019-5-14 01:54
樓主編譯時出現(xiàn)了這樣的錯誤
..\Output\stm32_DEMO.axf: error: L6031U: Could not open scatter descript ...

https://blog.csdn.net/xiang_shao344/article/details/81474288
回復(fù)

使用道具 舉報(bào)

12#
ID:584645 發(fā)表于 2019-7-15 19:31 | 只看該作者
挺好挺好...
回復(fù)

使用道具 舉報(bào)

13#
ID:588361 發(fā)表于 2019-8-9 21:55 | 只看該作者
很有幫助~
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 男女羞羞视频在线免费观看 | 午夜小影院 | 日韩成人在线视频 | 天堂av在线影院 | 午夜视频一区二区 | 精品久久久久久亚洲综合网站 | 天堂av中文 | 日韩精品一区二区三区四区 | 国产黄色大片网站 | 国产婷婷综合 | 一区二区三区不卡视频 | 欧美专区在线 | 国产真实精品久久二三区 | 毛片一级片 | 免费久久网 | 亚洲高清视频在线 | 国产无套一区二区三区久久 | 亚洲女人天堂成人av在线 | 91热爆在线观看 | 久久精品福利视频 | 青青草在线视频免费观看 | 亚洲精品小视频在线观看 | 久久精品av麻豆的观看方式 | 精品视频在线一区 | 久久久国产精品 | 久久精品一区 | 超碰日韩 | 一区视频| 日韩欧美中文在线 | 国产精品成人在线 | 中文字幕免费视频 | 日日干日日 | 久久久久久综合 | 亚洲精品456| 超碰网址| 一区二区三区中文字幕 | 免费的网站www| 色吧综合| 国产成人啪免费观看软件 | 国产91在线 | 亚洲 | 精品一区二区三区四区外站 |