色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32單片機(jī)簡(jiǎn)易定時(shí)器PWM輸出

          STM32單片機(jī)簡(jiǎn)易定時(shí)器PWM輸出

          作者: 時(shí)間:2016-11-30 來源:網(wǎng)絡(luò) 收藏

          void led_init(void);

          #endif

          //------------------------主函數(shù)-----------test.c-----------
          #include
          #include "sys.h"
          #include "delay.h"
          #include "usart.h"
          #include "led.h"
          #include "key.h"
          #include "time.h"

          char pwm; //pwm增減量
          char cnt; //pwm時(shí)間變量

          //-----------------------pwm增量按鍵----------------
          void key1_scan()
          {
          static u8 i,j;
          if(key1==0)
          {
          if(i==0)
          {
          j++;
          if(j>3)
          {
          i=1;j=0;
          pwm+=5;
          if(pwm>100)pwm=0;
          }
          }
          }
          else
          {
          i=j=0;
          }
          }

          //--------------------pwm減量按鍵--------------------
          void key2_scan()
          {
          static u8 i,j;
          if(key2==0)
          {
          if(i==0)
          {
          j++;
          if(j>3)
          {
          i=1;j=0;
          pwm-=5;
          if(pwm<10)pwm=0;
          }
          }
          }
          else
          {
          i=j=0;
          }
          }

          void TIM3_IRQHandler(void) //定時(shí)器2中斷函數(shù)
          {
          if(TIM3->SR&0x0001)
          {
          cnt++;
          if(cnt>100)cnt=0;
          if(cnt>pwm) //LED0作為pwm 輸出指示
          {
          LED0=0;
          }
          else
          {
          LED0=1;
          }
          }
          TIM3->SR&=~(1<<0); //清除中斷標(biāo)志位
          }


          int main(void)
          {
          u16 i,t;
          Stm32_Clock_Init(9);
          delay_init(72);
          uart_init(72,9600);
          led_init();
          key_init();
          time_init(3600,1); //產(chǎn)生10K頻率 pwm只是~~100HZ 由于100分頻
          while(1)
          {
          key1_scan();
          key2_scan();
          t++;
          if(t>60000)
          {
          i++;
          if(i>11)
          {
          LED1=!LED1; //系統(tǒng)運(yùn)行指示約1秒閃爍一次
          i=0;
          }
          t=0;
          }

          }
          }

          //--------------------------------關(guān)于定時(shí)器溢出時(shí)間計(jì)算--------------------------
          1)TIM3時(shí)鐘使能。
          這里我們通過APB1ENR的第1位來設(shè)置TIM3的時(shí)鐘,因?yàn)镾tm32_Clock_Init函數(shù)里面把APB1的分頻設(shè)置為2了,所以我們的TIM3時(shí)鐘就是APB1時(shí)鐘的2被,等于系統(tǒng)時(shí)鐘。(72M)

          Tout= (arr*(psc+1))/Tclk;
          其中:
          Tclk:TIM3的輸入時(shí)鐘頻率(單位為Khz)。
          Tout:TIM3溢出時(shí)間(單位為ms)。

          Tout=(3600*(1+1))/72M=0.1ms

          //------------------------------系統(tǒng)時(shí)鐘初始化函數(shù)對(duì)于定時(shí)器TIM3時(shí)鐘簡(jiǎn)易分析-----------------
          void Stm32_Clock_Init(u8 PLL)
          {
          unsigned char temp=0;
          MYRCC_DeInit(); //復(fù)位并配置向量表
          RCC->CR|=0x00010000; //外部高速時(shí)鐘使能HSEON
          while(!(RCC->CR>>17));//等待外部時(shí)鐘就緒
          RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
          PLL-=2;//抵消2個(gè)單位
          RCC->CFGR|=PLL<<18; //設(shè)置PLL值 2~16
          RCC->CFGR|=1<<16; //PLLSRC ON
          FLASH->ACR|=0x32; //FLASH 2個(gè)延時(shí)周期

          RCC->CR|=0x01000000; //PLLON
          while(!(RCC->CR>>25));//等待PLL鎖定
          RCC->CFGR|=0x00000002;//PLL作為系統(tǒng)時(shí)鐘
          while(temp!=0x02) //等待PLL作為系統(tǒng)時(shí)鐘設(shè)置成功
          {
          temp=RCC->CFGR>>2;
          temp&=0x03;
          }
          }


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: STM32單片機(jī)定時(shí)器PWM輸

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉