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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32F103產生PWM波并計算發送個數源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:379721 發表于 2018-8-21 13:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "stm32f10x.h"               
#include "user_Config.h"              
#include "stm32_eval.h"
#include <stdio.h>


/********************************************************************
********************************************************************/
void start_run(void);
void stop_run(void);




uint8_t  flag =0;
uint8_t  stop_flag =0;    //運轉標志
uint8_t  auto_flag =0;
uint8_t  auto_flag1 =0;
uint32_t count =0;
uint32_t round =0;
uint32_t speed_cal = 750;




延時函數




void Delay(vu32 nCount)
{
        uint32_t a;
        uint32_t b;
  for(a=nCount;a>0;a--)
                for(b=8000;b>0;b--);
}







配置時鐘函數

void RCC_Configuration(void)
{
  /* TIM3 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  /* GPIOA and GPIOB clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);
}


pwm波產生管腳設置

void GPIO_pwm_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //復用推挽輸出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

正反轉及調速

void GPIO_key_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOB, &GPIO_InitStructure);
}

步進電機驅動器使能及方向控制

void GPIO_type_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_ResetBits(GPIOC,GPIO_Pin_0);
        GPIO_SetBits(GPIOC,GPIO_Pin_1);
}

定時器設置

void pwm(void)
{
  TIM_TimeBaseStructure.TIM_Period = speed_cal;
  TIM_TimeBaseStructure.TIM_Prescaler = 3-1;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  TIM_ClearFlag(TIM3, TIM_FLAG_Update);                    
  TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = speed_cal/2;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OC1Init(TIM3, &TIM_OCInitStructure);
  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
  TIM_ARRPreloadConfig(TIM3, ENABLE);

  //TIM_Cmd(TIM3, DISABLE);
}

中斷優先級設置

void TIM3_NVIC_Configuration(void)   
{
        NVIC_InitTypeDef NVIC_InitStructure;                        
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                                                                                                                                   
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;                     
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;        
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                    
                  
  NVIC_Init(&NVIC_InitStructure);
}

中斷函數(統計脈沖個數)

void TIM3_IRQHandler(void)  
{
        if(TIM_GetITStatus(TIM3,TIM_IT_Update!=RESET))
        {
                TIM_ClearITPendingBit(TIM3,TIM_FLAG_Update);
                count++;
                if(count == 768750)
                {
                        count = 0;
                        round++;
                }
                if(round == 5)
                {
                        round = 0;
                        if(flag == 1)
                        {
                                if(auto_flag == 0)
                                {
                                        auto_flag = 1;
                                        stop_run();
                                        Delay(2000);
                                        GPIO_SetBits(GPIOC,GPIO_Pin_0);
                                        start_run();
                                }
                                else
                                {
                                        auto_flag = 0;
                                        stop_run();
                                        Delay(2000);
                                        GPIO_ResetBits(GPIOC,GPIO_Pin_0);
                                        start_run();
                                }
                        }
                }
        }
}

開始發送pwm

void start_run(void)
{
        TIM_Cmd(TIM3, ENABLE);
}

關閉發送pwm

void stop_run(void)
{
        TIM_Cmd(TIM3, DISABLE);
}

正傳

void start_scan1(void)
{
        if(stop_flag == 0)
        {
                if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==0)
                {
                        Delay(200);
                        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==0)
                        {        
                                GPIO_ResetBits(GPIOC,GPIO_Pin_0);
                                start_run();
                                stop_flag = 1;
                                while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12));
                        }
                }
  }
}

反轉

void start_scan2(void)
{
        if(stop_flag == 0)
        {
                if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0)
                {
                        Delay(200);
                        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0)
                        {        
                                GPIO_SetBits(GPIOC,GPIO_Pin_0);
                                start_run();
                                stop_flag =1;
                                while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13));
                        }
                }
  }
}

停止

void stop_scan(void)
{
        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)==0)
        {
                Delay(200);
                if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)==0)
                {                                                
                        stop_run();
                        GPIO_ResetBits(GPIOC,GPIO_Pin_0);
                        Delay(1500);
                        stop_flag = 0;
                        while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15));
                }
        }
}


調速


void change_speed(void)
{
        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==0)
        {
                Delay(200);
                if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==0)
                {
                        if(speed_cal == 750)
                        {
                                speed_cal = 375;
                        }
                        else
                        {
                                speed_cal = 750;
                        }
                        TIM3->ARR = speed_cal;
                        pwm();
                        //TIM_Cmd(TIM3, ENABLE);
                        while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14));
                }
        }
}

自動旋轉


void auto_run(void)
{
        if(stop_flag == 0)
        {
                if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)
                {
                        Delay(200);
                        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)
                        {
                                if(auto_flag1 == 0)
                                        auto_flag1 =1;
                        }
                }
  }
}
/****************************************************************************************************************************************/
int main(void)
{
  RCC_Configuration();
  GPIO_pwm_Configuration();                                                                                                        
  GPIO_key_Configuration();
  GPIO_type_Configuration();
  TIM3_NVIC_Configuration();
  pwm();
  while (1)
  {
                auto_run();
                if(auto_flag1 ==0)
                {
                        start_scan1();
                        start_scan2();
                        stop_scan();
                        change_speed();
                }
                else
                {        
                        if(flag == 0)
                        {
                                flag = 1;
                                GPIO_ResetBits(GPIOC,GPIO_Pin_0);
                                start_run();
                        }
                        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)==0)
                        {
                                Delay(200);
                                if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)==0)
                                {                                                
                                        stop_run();
                                        GPIO_ResetBits(GPIOC,GPIO_Pin_0);
                                        auto_flag1 =0;
                                        while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15));
                                }
                        }
                }
        }
}



評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 羞视频在线观看 | www.成人.com | 精品日韩一区 | 欧美久久久久 | 欧美性极品xxxx做受 | 超级乱淫av片免费播放 | 99精品网 | 亚洲成人午夜在线 | 男人天堂久久久 | 最新免费av网站 | 99精品99| 日韩精品视频在线免费观看 | 97av视频在线| 国产成人免费在线观看 | 国产精品国产a | 国产精品欧美精品 | h片在线看| www.com久久久 | 欧美精品一区二区三区蜜桃视频 | 亚洲精品久久久久久国产精华液 | 国产精品久久久乱弄 | 久久区二区 | 亚洲成人免费视频 | 蜜桃日韩 | 日韩国产一区二区三区 | 香蕉视频一区二区 | 欧美日韩在线成人 | 狠狠草视频 | 亚洲3级 | 国产精品资源在线观看 | 日日夜夜影院 | 国产精品国产三级国产aⅴ原创 | 91视频在线| www.色53色.com| 国产精品久久7777777 | 亚洲第一成年免费网站 | 韩国精品在线观看 | 日韩图区| 欧美日韩免费在线 | 亚洲一区二区不卡在线观看 | 亚洲欧洲色视频 |