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

標(biāo)題: STM32F103產(chǎn)生PWM波并計(jì)算發(fā)送個(gè)數(shù)源碼 [打印本頁]

作者: 張超01    時(shí)間: 2018-8-21 13:37
標(biāo)題: STM32F103產(chǎn)生PWM波并計(jì)算發(fā)送個(gè)數(shù)源碼
#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;    //運(yùn)轉(zhuǎn)標(biāo)志
uint8_t  auto_flag =0;
uint8_t  auto_flag1 =0;
uint32_t count =0;
uint32_t round =0;
uint32_t speed_cal = 750;




延時(shí)函數(shù)




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







配置時(shí)鐘函數(shù)

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波產(chǎn)生管腳設(shè)置

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

  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

正反轉(zhuǎn)及調(diào)速

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);
}

步進(jìn)電機(jī)驅(qū)動(dòng)器使能及方向控制

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);
}

定時(shí)器設(shè)置

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);
}

中斷優(yōu)先級(jí)設(shè)置

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);
}

中斷函數(shù)(統(tǒng)計(jì)脈沖個(gè)數(shù))

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();
                                }
                        }
                }
        }
}

開始發(fā)送pwm

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

關(guān)閉發(fā)送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));
                        }
                }
  }
}

反轉(zhuǎn)

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));
                }
        }
}


調(diào)速


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));
                }
        }
}

自動(dòng)旋轉(zhuǎn)


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));
                                }
                        }
                }
        }
}








歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 天天插天天狠天天透 | 国产中文在线观看 | 97人人干 | 亚洲福利网 | 日本精品网站 | 99热在线免费观看 | 精品一区二区三区视频 | 国产美女免费 | 日韩在线视频免费 | 免费看黄色网址 | 天天摸天天干 | 国产传媒一区二区 | 中文字幕在线观看网址 | 欧美精品在线播放 | 在线亚洲一区 | 亚洲视频免费在线观看 | 每日更新av | 国产精品欧美日韩 | 韩日一区二区 | 日本在线观看网站 | av手机天堂 | 欧美a级成人淫片免费看 | 国产免费a | 在线免费看a | 免费一级黄色录像 | 黑人一级黄色片 | 少妇久久久 | 蜜臀av性久久久久av蜜臀妖精 | 亚洲在线一区 | 久久狠狠干 | 亚洲精品乱码久久久久久 | 狠狠躁日日躁夜夜躁2022麻豆 | 成人在线免费观看网站 | 日韩一区二区在线播放 | 成人在线小视频 | 欧美日韩在线一区 | 国产成人精品视频 | 亚洲另类视频 | 久久天天干| 免费看成人片 | 成人免费视频一区二区 |