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

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

QQ登錄

只需一步,快速開始

搜索
查看: 1754|回復(fù): 1
收起左側(cè)

stm32編碼器測(cè)量

[復(fù)制鏈接]
ID:366526 發(fā)表于 2018-7-6 21:04 | 顯示全部樓層 |閱讀模式
含有一路,兩路脈沖的測(cè)量
通過lcd屏顯示
  1. #include "timer.h"
  2. #include "led.h"
  3. #include "usart.h"
  4. #include "sys.h"
  5. #include "key.h"      

  6. //PWM輸出初始化
  7. //arr:自動(dòng)重裝值
  8. //psc:時(shí)鐘預(yù)分頻數(shù)

  9. //定時(shí)器2通道1輸入捕獲配置



  10. void TIM2_Cap_Init(u16 arr,u16 psc)
  11. {         
  12.         TIM_ICInitTypeDef  TIM2_ICInitStructure;
  13.         GPIO_InitTypeDef GPIO_InitStructure;
  14.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  15.          NVIC_InitTypeDef NVIC_InitStructure;

  16.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        //使能TIM2時(shí)鐘
  17.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIOA時(shí)鐘
  18. //                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //使能GPIOA時(shí)鐘
  19.         GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;  //PA0 清除之前設(shè)置  
  20.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //PA0 輸入  
  21.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  22.         GPIO_ResetBits(GPIOA,GPIO_Pin_0);                                                 //PA0 下拉
  23.         
  24.         GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_14;  //PA0 清除之前設(shè)置  
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //PA0 輸入  
  26.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  27.         GPIO_ResetBits(GPIOA,GPIO_Pin_14);                                                 //PA0 下拉
  28.         
  29.         //初始化定時(shí)器2 TIM2         
  30.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)定計(jì)數(shù)器自動(dòng)重裝值
  31.         TIM_TimeBaseStructure.TIM_Prescaler =psc;         //預(yù)分頻器   
  32.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  33.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  34.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位
  35.   
  36.         //初始化TIM2輸入捕獲參數(shù)
  37.         TIM2_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01         選擇輸入端 IC1映射到TI1上
  38.           TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;        //上升沿捕獲
  39.           TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
  40.           TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;         //配置輸入分頻,不分頻
  41.           TIM2_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置輸入濾波器 不濾波
  42.           TIM_ICInit(TIM2, &TIM2_ICInitStructure);
  43.         
  44.         //中斷分組初始化
  45.         NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM2中斷
  46.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //先占優(yōu)先級(jí)2級(jí)
  47.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //從優(yōu)先級(jí)0級(jí)
  48.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  49.         NVIC_Init(&NVIC_InitStructure);  //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器
  50.         
  51.         TIM_ITConfig(TIM2,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允許更新中斷 ,允許CC1IE捕獲中斷        
  52.         
  53.   TIM_Cmd(TIM2,ENABLE );         //使能定時(shí)器2

  54. }



  55. void TIM3_Cap_Init(u16 arr,u16 psc)
  56. {         
  57.         TIM_ICInitTypeDef  TIM2_ICInitStructure;
  58.         GPIO_InitTypeDef GPIO_InitStructure;
  59.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  60.          NVIC_InitTypeDef NVIC_InitStructure;

  61.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //使能TIM2時(shí)鐘
  62.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIOA時(shí)鐘
  63. //                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //使能GPIOA時(shí)鐘
  64.         GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6;  //PA0 清除之前設(shè)置  
  65.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //PA0 輸入  
  66.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  67.         GPIO_ResetBits(GPIOA,GPIO_Pin_0);                                                 //PA0 下拉
  68.         
  69.         GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_13;  //PA0 清除之前設(shè)置  
  70.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //PA0 輸入  
  71.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  72.         GPIO_ResetBits(GPIOA,GPIO_Pin_13);                                                 //PA0 下拉
  73.         
  74.         //初始化定時(shí)器2 TIM2         
  75.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)定計(jì)數(shù)器自動(dòng)重裝值
  76.         TIM_TimeBaseStructure.TIM_Prescaler =psc;         //預(yù)分頻器   
  77.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  78.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  79.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位
  80.   
  81.         //初始化TIM2輸入捕獲參數(shù)
  82.         TIM2_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01         選擇輸入端 IC1映射到TI1上
  83.           TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;        //上升沿捕獲
  84.           TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
  85.           TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;         //配置輸入分頻,不分頻
  86.           TIM2_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置輸入濾波器 不濾波
  87.           TIM_ICInit(TIM3, &TIM2_ICInitStructure);
  88.         
  89.         //中斷分組初始化
  90.         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM2中斷
  91.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //先占優(yōu)先級(jí)2級(jí)
  92.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //從優(yōu)先級(jí)0級(jí)
  93.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  94.         NVIC_Init(&NVIC_InitStructure);  //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器
  95.         
  96.         TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允許更新中斷 ,允許CC1IE捕獲中斷        
  97.         
  98.   TIM_Cmd(TIM3,ENABLE );         //使能定時(shí)器2

  99. }

  100. u8  TIM2CH1_CAPTURE_STA=0;        //輸入捕獲狀態(tài)                                                   
  101. u16        TIM2CH1_CAPTURE_VAL;        //輸入捕獲值
  102. unsigned long a=10000;

  103. //定時(shí)器5中斷服務(wù)程序         
  104. void TIM2_IRQHandler(void)
  105. {
  106.         if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕獲1發(fā)生捕獲事件
  107.                 {        
  108.                         if(TIM2CH1_CAPTURE_STA&0X40)                //捕獲到一個(gè)下降沿                 
  109.                         {                                 
  110.                                         TIM2CH1_CAPTURE_STA|=0X80;                //標(biāo)記成功捕獲到一次上升沿
  111.                                 if(IN==1)
  112.                                                 {
  113.                                                         a++;
  114.                                                         
  115.                                                 }
  116.                                         if(IN==0)
  117.                                                 {
  118.                                                 a--;
  119.                                                 
  120.                                         }
  121.                                                 TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC1P=0 設(shè)置為上升沿捕獲
  122.                         }else                                                                  //還未開始,第一次捕獲上升沿
  123.                         {
  124.                                 TIM2CH1_CAPTURE_STA=0;                        //清空
  125.                                 TIM2CH1_CAPTURE_VAL=0;
  126.                                  TIM_SetCounter(TIM2,0);
  127.                                 TIM2CH1_CAPTURE_STA|=0X40;                //標(biāo)記捕獲到了上升沿
  128.                                    TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling);                //CC1P=1 設(shè)置為下降沿捕獲
  129.                         }                    
  130.                 }                                                                                    
  131.          
  132.     TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update); //清除中斷標(biāo)志位
  133. }


  134. u8  TIM3CH1_CAPTURE_STA=0;        //輸入捕獲狀態(tài)                                                   
  135. u16        TIM3CH1_CAPTURE_VAL;        //輸入捕獲值
  136. unsigned long b=10000;
  137. void TIM3_IRQHandler(void)
  138. {
  139.         if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET)//捕獲1發(fā)生捕獲事件
  140.                 {        
  141.                         if(TIM3CH1_CAPTURE_STA&0X40)                //捕獲到一個(gè)下降沿                 
  142.                         {                                 
  143.                                         TIM3CH1_CAPTURE_STA|=0X80;                //標(biāo)記成功捕獲到一次上升沿
  144.                                 if(in==1)
  145.                                                 {
  146.                                                         b++;
  147.                                                         
  148.                                                 }
  149.                                         if(in==0)
  150.                                                 {
  151.                                                 b--;
  152.                                                 
  153.                                         }
  154.                                                 TIM_OC1PolarityConfig(TIM3,TIM_ICPolarity_Rising); //CC1P=0 設(shè)置為上升沿捕獲
  155.                         }else                                                                  //還未開始,第一次捕獲上升沿
  156.                         {
  157.                                 TIM3CH1_CAPTURE_STA=0;                        //清空
  158.                                 TIM3CH1_CAPTURE_VAL=0;
  159.                                  TIM_SetCounter(TIM3,0);
  160.                                 TIM3CH1_CAPTURE_STA|=0X40;                //標(biāo)記捕獲到了上升沿
  161.                                    TIM_OC1PolarityConfig(TIM3,TIM_ICPolarity_Falling);                //CC1P=1 設(shè)置為下降沿捕獲
  162.                         }                    
  163.                 }                                                                                    
  164.          
  165.     TIM_ClearITPendingBit(TIM3, TIM_IT_CC1|TIM_IT_Update); //清除中斷標(biāo)志位
  166. }



  167. #include "led.h"
  168. #include "delay.h"
  169. #include "sys.h"
  170. #include "timer.h"
  171. #include "usart.h"
  172. #include "key.h"
  173. //ALIENTEK Mini STM32開發(fā)板范例代碼9
  174. //輸入捕獲實(shí)驗(yàn)   
  175. //技術(shù)支持:www.openedv.com
  176. //廣州市星翼電子科技有限公司


  177. extern u8  TIM2CH1_CAPTURE_STA;                //輸入捕獲狀態(tài)                                                   
  178. extern u16        TIM2CH1_CAPTURE_VAL ;        //輸入捕獲值
  179. extern u8  TIM3CH1_CAPTURE_STA;                //輸入捕獲狀態(tài)                                                   
  180. extern u16        TIM3CH1_CAPTURE_VAL ;        //輸入捕獲值
  181. extern unsigned long a,b;
  182. int main(void)
  183. {        
  184.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設(shè)置中斷優(yōu)先級(jí)分組2
  185.         delay_init();                     //延時(shí)函數(shù)初始化        
  186.         uart_init(9600);                                 //9600         
  187.         LED_Init();                          //初始化與LED連接的硬件接口
  188.          LCD_Init();              //串口初始化為115200
  189.          TIM2_Cap_Init(0XFFFF,0);                //以1Mhz的頻率計(jì)數(shù)
  190.          TIM3_Cap_Init(0XFFFF,0);
  191.          KEY_Init();
  192.         LCD_ShowString(30,40,200,24,24,"Mini STM32 ^_^");        
  193.         LCD_ShowString(30,70,200,16,16,"LIU HONG ZHI");
  194.         LCD_ShowString(30,90,200,16,16,"BIAN MA QI CE SHI");                                               
  195.         LCD_ShowString(30,130,200,12,12,"2018/6/25");         
  196.            while(1)
  197.         {
  198.                                                 
  199.         if(TIM2CH1_CAPTURE_STA&0X80)//成功捕獲到了一次高電平
  200.    {        
  201.                   LCD_ShowxNum(30,180,a,8,24,0);        
  202.                         TIM2CH1_CAPTURE_STA=0;                        //開啟下一次捕獲
  203.                  }
  204.          if(TIM3CH1_CAPTURE_STA&0X80)//成功捕獲到了一次高電平
  205.    {        
  206.                   LCD_ShowxNum(30,230,b,8,24,0);        
  207.                         TIM3CH1_CAPTURE_STA=0;                        //開啟下一次捕獲
  208.                  }
  209.         }
  210. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:477269 發(fā)表于 2019-3-2 23:17 | 顯示全部樓層
感謝樓主的貢獻(xiàn)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美亚洲高清 | 97中文视频 | 暖暖日本在线视频 | 中文字幕亚洲区一区二 | 日韩毛片| av大片| 亚洲视频在线播放 | 老头搡老女人毛片视频在线看 | 国产有码| 激情久久网| 99国内精品久久久久久久 | 黄免费观看视频 | 可以免费看的毛片 | 久久人人爽人人爽 | 亚洲国产成人久久综合一区,久久久国产99 | 久久国产精品免费一区二区三区 | 九色一区 | 岛国av一区二区 | 伊人激情综合网 | 日韩二区 | 91影库| 五月婷婷丁香 | 免费电影av | 国产精品九九视频 | 国产成人免费一区二区60岁 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 亚洲视频 欧美视频 | 91色在线| 欧美综合国产精品久久丁香 | 久久久精品一区二区三区四季av | 久草综合在线视频 | 欧美小视频在线观看 | 免费午夜视频在线观看 | 欧美精品成人影院 | 在线免费观看a级片 | 久久久久国产一区二区三区 | 99精品视频一区二区三区 | 日本不卡在线视频 | 亚洲免费一区二区 | 日韩精品免费在线 | 在线精品一区二区三区 |