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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32F103基于PS2手柄遙控小車

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"         
#include "pstwo.h"
#include "moto.h"
/*********************************************************
功能:通過PS2控制小車運動
硬件平臺:STM32F103C8T6
時鐘:8Mhz

硬件引腳分配:
//手柄接口
DI=PB12;        
DO=PB13 ;
CS=PB14;
CLK=PB15;

//L298N 電機驅動控制引腳
IN1=PA0;           //左側電機正  
IN2=PA1;                //左側電機負  
IN3=PA2;           //右側電機正   
IN4=PA3;                //右側電機負

LED = PC13;
**********************************************************/         
//#define go                         {IN1=1;IN2=0;IN3=0;IN4=1;}
//#define back                 {IN1=0;IN2=1;IN3=1;IN4=0;}
//#define stop                {IN1=1;IN2=1;IN3=1;IN4=1;}
//#define turnleft                {IN1=1;IN2=1;IN3=0;IN4=1;}
//#define turnright                {IN1=1;IN2=0;IN3=1;IN4=1;}



int speed;

char SysClock;       //申請存儲系統時鐘變量,單位MHz
char SystemClock_HSE(u8 PLL);
void MYRCC_DeInit(void);

int main(void)
{         
         u8 key=0;
        SystemClock_HSE(9);           //系統時鐘初始化,時鐘源外部晶振HSEs  8*9=72MHz;
        delay_init();                     //延時函數初始化         
        NVIC_Configuration();          //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
        uart_init(9600);                 //串口初始化為9600
         LED_Init();                             //LED端口初始化
        PS2_Init();                                 
  //motor_Init();
        MotorInit();
        //printf("hello! \r\n");
        speed=10;
         
        while(1)
        {
        
                key=PS2_DataKey();
               
                 switch(key)
                 {
                         case 5:go;break;
                         case 7:back;break;
                         case 8:turnleft;break;
                         case 6:turnright;break;
                         case 9:LED_ON;break;
                         case 10:LED_OFF;break;
                         case 11:speed=(speed>=10)?10:speed+1;break;
                         case 12:speed=(speed<=0)?0:speed-1;break;
                        
                         default:stop;break;                        
                 }
                if(key!=0)                   //有按鍵按下
            {
                        printf("%d  is  pressed  \r\n",key);
            }
//                printf(" %5d %5d %5d %5d\r\n",PS2_AnologData(PSS_LX),PS2_AnologData(PSS_LY),
//                                              PS2_AnologData(PSS_RX),PS2_AnologData(PSS_RY) );
                  
       delay_ms(10);
        }                        
}



//不能在這里執行所有外設復位!否則至少引起串口不工作.                    
//把所有時鐘寄存器復位                  
void MYRCC_DeInit(void)
{        
         RCC->APB1RSTR = 0x00000000;//復位結束                        
        RCC->APB2RSTR = 0x00000000;

  RCC->AHBENR = 0x00000014;  //睡眠模式閃存和SRAM時鐘使能.其他關閉.         
  RCC->APB2ENR = 0x00000000; //外設時鐘關閉.                           
  RCC->APB1ENR = 0x00000000;   
        RCC->CR |= 0x00000001;     //使能內部高速時鐘HSION                                                                                                                                 
        RCC->CFGR &= 0xF8FF0000;   //復位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]                                         
        RCC->CR &= 0xFEF6FFFF;     //復位HSEON,CSSON,PLLON
        RCC->CR &= 0xFFFBFFFF;     //復位HSEBYP                     
        RCC->CFGR &= 0xFF80FFFF;   //復位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE
        RCC->CIR = 0x00000000;     //關閉所有中斷                 
}


/********************************************
           使用外部晶體作為系統時鐘源
功能:
1.使用外部HSE時鐘8M作為PLL輸入
2.PLL倍頻系數PLLMUL<=9(實際到達16時,還能正常倍頻外部時鐘)
3.輸入參數:PLLMUL,PLL倍頻系數
4.備注:官方手冊上說,使用HSE作為系統時鐘源時,最高可倍頻到72MHz,但是實際可以倍頻到128M系統還算穩定
********************************************/
//系統時鐘初始化函數
//pll:選擇的倍頻數,從2開始,最大值為16               
//時鐘源為外部晶振
//備注:當機身焊接了8M晶振時,就只能使用外部8M晶振作為時鐘源,
//      用內部的HSI不好使,我反正沒調出來,看各位有啥辦法沒
char SystemClock_HSE(u8 PLL)
{
        unsigned char temp=0;   
        MYRCC_DeInit();                    //復位并配置向量表
         RCC->CR|=1<<16;       //外部高速時鐘使能HSEON
        while(!(RCC->CR>>17));//等待外部時鐘就緒
        RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
        PLL-=2;//抵消2個單位
        RCC->CFGR|=PLL<<18;   //設置PLL值 2~16
        RCC->CFGR|=1<<16;            //PLLSRC ON
        FLASH->ACR|=0x32;            //FLASH 2個延時周期
        RCC->CR|=0x01000000;  //PLLON
        while(!(RCC->CR>>25));//等待PLL鎖定
        RCC->CFGR|=0x00000002;//PLL作為系統時鐘         
        while(temp!=0x02)     //等待PLL作為系統時鐘設置成功
        {   
                temp=RCC->CFGR>>2;
                temp&=0x03;
        }   

  SysClock=(PLL+2)*8;
  return SysClock;
}        

代碼下載: 51黑論壇_基于STM32F103C8T6的PS2遙控小車源碼及接線(已調).7z (443.59 KB, 下載次數: 30)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.国产日本 | 久久精品| 成人影院在线观看 | 久久国产精品视频 | 毛片视频免费观看 | 国产精品一区二区视频 | 成人国内精品久久久久一区 | 一区网站 | 国产黄色大片在线免费观看 | 免费xxxx大片国产在线 | 国产精品久久一区二区三区 | 精品国产一区二区久久 | 97超碰在线播放 | 亚洲精品久久久久久国产精华液 | 在线欧美亚洲 | 亚洲福利av| 天天操天天干天天爽 | 一区二区中文字幕 | 国产精品日韩一区二区 | 国产亚洲欧美在线 | 欧美色视频免费 | 黄色免费观看网站 | 欧美精品一区二区三区在线播放 | 美国一级毛片a | 国产 日韩 欧美 中文 在线播放 | 欧州一区二区三区 | 91精品国产综合久久久久久丝袜 | 欧美一级三级在线观看 | 日韩在线欧美 | 欧美精品在线免费 | 国产精品性做久久久久久 | 欧美在线视频一区二区 | 亚洲一区二区视频在线播放 | 一区二区av | 在线播放国产一区二区三区 | 日韩午夜激情 | 欧美黄色精品 | 日韩欧美国产不卡 | 国产精品视频在线播放 | 日韩在线不卡视频 | 伦理午夜电影免费观看 |