日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

STM32智能遥控小车,超详细-附下载直接可以用,双电源跑贼快!

發(fā)布時(shí)間:2023/12/29 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32智能遥控小车,超详细-附下载直接可以用,双电源跑贼快! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)介

  • 小車的動(dòng)力部分由4個(gè)帶減速箱的電機(jī),和兩個(gè)L298N電機(jī)驅(qū)動(dòng)模塊組成。
  • 通過STM32核心板控制電機(jī)驅(qū)動(dòng)模塊,JDY-31藍(lán)牙模塊與手機(jī)通訊。
  • 總共三塊電池,一塊專門給單片機(jī)供電,另外兩塊串聯(lián)在一起同時(shí)給電機(jī)驅(qū)動(dòng)模塊供電(為什么選擇分別供電后面的電源硬件部分有說)。
  • 源碼下載,提取碼:nxo3

硬件

  • 硬件的基本介紹
    • 電機(jī)的位置很重要,因?yàn)殡姍C(jī)驅(qū)動(dòng)模塊一個(gè)可以分別控制兩個(gè)電機(jī),而且程序里面也是分別控制單個(gè)電機(jī)的動(dòng)作。
    • 如果電機(jī)的和自己想要的運(yùn)動(dòng)方向不一樣的話,交換一下接線端的兩個(gè)線就好了。程序里面小車前進(jìn)默認(rèn)是電機(jī)1、2CW(順時(shí)針),電機(jī)3、4CCW(逆時(shí)針)。
  • L298N電機(jī)驅(qū)動(dòng)模塊
    電機(jī)驅(qū)動(dòng)模塊這里不細(xì)講,網(wǎng)上有很多資料,很簡(jiǎn)單的。
    下面這個(gè)是右邊的驅(qū)動(dòng)板,控制電機(jī)1、2。

    下面是左邊的驅(qū)動(dòng)板,控制電機(jī)3、4。
    • 兩個(gè)驅(qū)動(dòng)板是并聯(lián)的,供電時(shí)應(yīng)選擇粗一點(diǎn)的導(dǎo)線給驅(qū)動(dòng)板供電,最好就不要使用杜邦線,如果使用杜邦線有可能會(huì)電壓不夠。
    • 有的時(shí)候電機(jī)可能要用手轉(zhuǎn)一下才能動(dòng),那是因?yàn)殡妷禾×?#xff0c;可以串聯(lián)幾個(gè)電池。我是用一個(gè)小米充電寶和4節(jié)干電池,電 壓應(yīng)該在10V左右。
    • 注意不能串聯(lián)太多充電寶,因?yàn)槌潆妼毶厦嬗羞^電流保護(hù),電流太大充電寶可能會(huì)斷電,甚至有可能會(huì)直接弄壞充電寶。
    • 如果是雙電源的話,單片機(jī)要和兩個(gè)驅(qū)動(dòng)板共地。
    • 電機(jī)驅(qū)動(dòng)模塊上面的電機(jī)使能端的跳帽要拔掉,因?yàn)槌绦蚴怯肞WM來控制使能引腳的通點(diǎn)時(shí)長來讓小車轉(zhuǎn)彎的。
  • 藍(lán)牙模塊JDY-31
    我使用的是透?jìng)魉{(lán)牙模塊,簡(jiǎn)單來說就是手機(jī)連接后給藍(lán)牙發(fā)送什么數(shù)據(jù),然后藍(lán)牙模塊再原封不動(dòng)的通過串口發(fā)給單片機(jī),所以只要懂串口的基本通信就好了。
    • 0V和3.3V是從單片機(jī)上取電的,驅(qū)動(dòng)板取電的話有可能會(huì)有干擾。
    • PA2、PA3是單片機(jī)的串口2引腳。本來我想用串口1通訊的,但是好像串口1只能接受到單片機(jī)發(fā)出來的數(shù)據(jù),不能用手機(jī)發(fā)送進(jìn)去給單片機(jī)(有可能是因?yàn)榇?的時(shí)鐘頻率太高),而且串口1正好留出來下載程序,所以就選擇了串口2。
    • 藍(lán)牙模塊的默認(rèn)波特率是9600,為了方便我也將串口的波特率也初始化成了9600。
    • 藍(lán)牙模塊的STATE引腳是藍(lán)牙的連接狀態(tài)引腳,連接成功會(huì)變成高電平。該引腳我用來給小車做緊急剎車,當(dāng)藍(lán)牙沒有連接或是斷開小車會(huì)自動(dòng)剎車,以免藍(lán)牙突然斷開時(shí)小車失控的運(yùn)動(dòng)。
  • 電源
    小車采用雙電源供電
    • 這里我選擇用兩個(gè)電源分別給單片機(jī)和驅(qū)動(dòng)板供電的原因
      電機(jī)啟動(dòng)會(huì)有很大的啟動(dòng)電流會(huì)在一瞬間將電流全部拉走,使得單片機(jī)斷電,如果藍(lán)牙模塊也是從單片機(jī)上取點(diǎn)也會(huì)斷電。
      直接電機(jī)的電刷會(huì)產(chǎn)生火花對(duì)通訊有干擾,有些質(zhì)量好的電機(jī)可能沒有(不太確定是不是這個(gè)原因,但同電源時(shí)通訊確實(shí)有干擾,藍(lán)牙會(huì)接收一些奇怪的數(shù)據(jù))。
    • 驅(qū)動(dòng)板的兩塊電源串聯(lián)連接,然后連接到驅(qū)動(dòng)板的電源接線端。

    程序

    程序只要按照上面的連接都是可以直接使用,如果硬件有改動(dòng)我也有定義宏可以直接做更改。
    代碼里面的注釋比較詳細(xì),這里只是將重要的代碼放上來,稍作講解,最好是直接下載來看。
    下載地址,提取碼:qsmu

    • 目錄結(jié)構(gòu)
  • main.c
  • #include "stm32f10x.h" // Device header #include "MTR_GPIO.h" #include "USART.h" #include "LED.h" #include "blueTooth.h" #include "PWM_GeneralTim.h"int main(void){USART_Config();//串口MTR_GPIOInit();//電機(jī)引腳GENERAL_TIM_Init();//定時(shí)器PWM初始化,用于小車轉(zhuǎn)向blueToothInit();//藍(lán)牙初始化LEDInit();printf("-----指令-----\n\0x01:小車后退\n\0x02:小車向左\n\0x03:小車向右\n\0x04:小車前進(jìn)\n\0x05:小車剎車\n\0x06:電機(jī)停止\n\0x07:小車逆時(shí)針\n\0x08:小車轉(zhuǎn)向停止\n\0x09:小車順時(shí)針\n");while(1){//如果藍(lán)牙斷開,小車會(huì)一直在剎車狀態(tài)if(BLUE_TOOTH_STATE != Bit_SET){MTR_CarBrakeAll();}} }
    • 主要是各功能的初始化。
    • 藍(lán)牙狀態(tài)的判斷。
  • stm32f10x_it.c
  • void DEBUG_USART_IRQHandler(void){uint8_t CMD = 0;//接收的命令if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET){LED1_ON;CMD = USART_ReceiveData(DEBUG_USARTx);//讀取一個(gè)switch(CMD){case 0x06://電機(jī)停止MTR_CarBrakeAll();printf("0x06");break;case 0x08://小車轉(zhuǎn)向停止PWM_CarMaxGo();printf("0x08");break;case 0x05://小車剎車MTR_CarBrakeAll();printf("0x05");break;case 0x02://小車向左PWM_CarLeft();printf("0x02");break;case 0x03://小車向右PWM_CarRight();printf("0x03");break;case 0x04://小車前進(jìn)MTR_CarGo();printf("0x04");break;case 0x01://小車后退MTR_CarBackGo();printf("0x01");break;case 0x07://小車逆時(shí)針MTR_CarCCW();printf("0x07");break;case 0x09://小車順時(shí)針MTR_CarCW();printf("0x09");break;}LED1_OFF;//讓LED閃爍來表示數(shù)據(jù)的接收}USART_ClearFlag(DEBUG_USARTx,USART_FLAG_RXNE); }
    • 串口通過接收十六進(jìn)制的指令來控制驅(qū)動(dòng)板。
    • 接收到特定的指令后,單片機(jī)會(huì)將小車執(zhí)行的指令再發(fā)送回給藍(lán)牙。
  • MTR_GPIO.c
  • #include "MTR_GPIO.h"//剎車 void MTR_CarBrakeAll(void){MTR1_BRAKE;MTR2_BRAKE;MTR3_BRAKE;MTR4_BRAKE; }//前進(jìn) void MTR_CarGo(void){MTR1_CW;MTR2_CW;MTR3_CCW;MTR4_CCW; }//后退 void MTR_CarBackGo(void){MTR1_CCW;MTR2_CCW;MTR3_CW;MTR4_CW; }//順時(shí)針 void MTR_CarCW(void){MTR1_CCW;MTR2_CCW;MTR3_CCW;MTR4_CCW; }//逆時(shí)針 void MTR_CarCCW(void){MTR1_CW;MTR2_CW;MTR3_CW;MTR4_CW; }void MTR_GPIOInit(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(MTR1_GPIO_CLK|MTR2_GPIO_CLK|MTR3_GPIO_CLK|MTR4_GPIO_CLK,ENABLE);//時(shí)鐘GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽輸出//電機(jī)1GPIO_InitStructure.GPIO_Pin = MTR1_GPIO_PIN;GPIO_Init(MTR1_GPIO_PORT, &GPIO_InitStructure);//電機(jī)2GPIO_InitStructure.GPIO_Pin = MTR2_GPIO_PIN;GPIO_Init(MTR2_GPIO_PORT, &GPIO_InitStructure);//電機(jī)3GPIO_InitStructure.GPIO_Pin = MTR3_GPIO_PIN;GPIO_Init(MTR3_GPIO_PORT, &GPIO_InitStructure);//電機(jī)4GPIO_InitStructure.GPIO_Pin = MTR4_GPIO_PIN;GPIO_Init(MTR4_GPIO_PORT, &GPIO_InitStructure);//小車剎車MTR_CarBrakeAll(); }

    注意:因?yàn)閱纹瑱C(jī)是控制驅(qū)動(dòng)板從而間接的控制電機(jī),為了簡(jiǎn)單我直接把控制驅(qū)動(dòng)板的引腳看成是控制電機(jī)的。

    • 電機(jī)的引腳初始化。
    • 小車前進(jìn)、后退、原地旋轉(zhuǎn)和剎車的函數(shù)封裝。
  • MTR_GPIO.h
  • #ifndef __MTR_GPIO_H #define __MTR_GPIO_H#include "stm32f10x.h"/*小車四輪驅(qū)動(dòng)電機(jī)1:右上電機(jī)2:右下電機(jī)3:左上電機(jī)4:左下 */ #define MTR1_GPIO_PORT GPIOB #define MTR1_GPIO_CLK RCC_APB2Periph_GPIOB #define MTR1_GPIO_PIN GPIO_Pin_6|GPIO_Pin_7 #define MTR1_CW {GPIO_ResetBits(MTR1_GPIO_PORT,GPIO_Pin_6);GPIO_SetBits(MTR1_GPIO_PORT,GPIO_Pin_7);}//順時(shí)針 #define MTR1_CCW {GPIO_SetBits(MTR1_GPIO_PORT,GPIO_Pin_6);GPIO_ResetBits(MTR1_GPIO_PORT,GPIO_Pin_7);}//逆時(shí)針 #define MTR1_BRAKE GPIO_ResetBits(MTR1_GPIO_PORT,MTR1_GPIO_PIN);#define MTR2_GPIO_PORT GPIOB #define MTR2_GPIO_CLK RCC_APB2Periph_GPIOB #define MTR2_GPIO_PIN GPIO_Pin_8|GPIO_Pin_9 #define MTR2_CW {GPIO_ResetBits(MTR2_GPIO_PORT,GPIO_Pin_8);GPIO_SetBits(MTR2_GPIO_PORT,GPIO_Pin_9);}//順時(shí)針 #define MTR2_CCW {GPIO_SetBits(MTR2_GPIO_PORT,GPIO_Pin_8);GPIO_ResetBits(MTR2_GPIO_PORT,GPIO_Pin_9);}//逆時(shí)針 #define MTR2_BRAKE GPIO_ResetBits(MTR2_GPIO_PORT,MTR2_GPIO_PIN);#define MTR3_GPIO_PORT GPIOB #define MTR3_GPIO_CLK RCC_APB2Periph_GPIOB #define MTR3_GPIO_PIN GPIO_Pin_12|GPIO_Pin_13 #define MTR3_CW {GPIO_ResetBits(MTR3_GPIO_PORT,GPIO_Pin_12);GPIO_SetBits(MTR3_GPIO_PORT,GPIO_Pin_13);}//順時(shí)針 #define MTR3_CCW {GPIO_SetBits(MTR3_GPIO_PORT,GPIO_Pin_12);GPIO_ResetBits(MTR3_GPIO_PORT,GPIO_Pin_13);}//逆時(shí)針 #define MTR3_BRAKE GPIO_ResetBits(MTR3_GPIO_PORT,MTR3_GPIO_PIN);#define MTR4_GPIO_PORT GPIOB #define MTR4_GPIO_CLK RCC_APB2Periph_GPIOB #define MTR4_GPIO_PIN GPIO_Pin_14|GPIO_Pin_15 #define MTR4_CW {GPIO_ResetBits(MTR4_GPIO_PORT,GPIO_Pin_14);GPIO_SetBits(MTR4_GPIO_PORT,GPIO_Pin_15);}//順時(shí)針 #define MTR4_CCW {GPIO_SetBits(MTR4_GPIO_PORT,GPIO_Pin_14);GPIO_ResetBits(MTR4_GPIO_PORT,GPIO_Pin_15);}//逆時(shí)針 #define MTR4_BRAKE GPIO_ResetBits(MTR4_GPIO_PORT,MTR4_GPIO_PIN);void MTR_CarBrakeAll(void); //小車剎車 void MTR_CarGo(void); //小車前進(jìn) void MTR_CarBackGo(void); //小車后退 void MTR_CarCW(void); //小車順時(shí)針轉(zhuǎn) void MTR_CarCCW(void); //小車逆時(shí)針轉(zhuǎn) void MTR_GPIOInit(void);#endif
    • 電機(jī)引腳的頭文件
  • PWM_GeneralTim.c
  • #include "PWM_GeneralTim.h" static void GENERAL_TIM_GPIO_Config(void) {GPIO_InitTypeDef GPIO_InitStructure;// 輸出比較通道1 GPIO 初始化RCC_APB2PeriphClockCmd(GENERAL_TIM_CH1_GPIO_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = GENERAL_TIM_CH1_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GENERAL_TIM_CH1_PORT, &GPIO_InitStructure);// 輸出比較通道2 GPIO 初始化RCC_APB2PeriphClockCmd(GENERAL_TIM_CH2_GPIO_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = GENERAL_TIM_CH2_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GENERAL_TIM_CH2_PORT, &GPIO_InitStructure);// 輸出比較通道3 GPIO 初始化RCC_APB2PeriphClockCmd(GENERAL_TIM_CH3_GPIO_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = GENERAL_TIM_CH3_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GENERAL_TIM_CH3_PORT, &GPIO_InitStructure);// 輸出比較通道4 GPIO 初始化RCC_APB2PeriphClockCmd(GENERAL_TIM_CH4_GPIO_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = GENERAL_TIM_CH4_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GENERAL_TIM_CH4_PORT, &GPIO_InitStructure); }///* // * 注意:TIM_TimeBaseInitTypeDef結(jié)構(gòu)體里面有5個(gè)成員,TIM6和TIM7的寄存器里面只有 // * TIM_Prescaler和TIM_Period,所以使用TIM6和TIM7的時(shí)候只需初始化這兩個(gè)成員即可, // * 另外三個(gè)成員是通用定時(shí)器和高級(jí)定時(shí)器才有. // *----------------------------------------------------------------------------- // *typedef struct // *{ TIM_Prescaler 都有 // * TIM_CounterMode TIMx,x[6,7]沒有,其他都有 // * TIM_Period 都有 // * TIM_ClockDivision TIMx,x[6,7]沒有,其他都有 // * TIM_RepetitionCounter TIMx,x[1,8,15,16,17]才有 // *}TIM_TimeBaseInitTypeDef; // *----------------------------------------------------------------------------- // *//* ---------------- PWM信號(hào) 周期和占空比的計(jì)算--------------- */ // ARR :自動(dòng)重裝載寄存器的值 // CLK_cnt:計(jì)數(shù)器的時(shí)鐘,等于 Fck_int / (psc+1) = 72M/(psc+1) // PWM 信號(hào)的周期 T = ARR * (1/CLK_cnt) = ARR*(PSC+1) / 72M // 占空比P=CCR/(ARR+1)static void GENERAL_TIM_Mode_Config(void) {TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;// 開啟定時(shí)器時(shí)鐘,即內(nèi)部時(shí)鐘CK_INT=72MGENERAL_TIM_APBxClock_FUN(GENERAL_TIM_CLK,ENABLE);/*--------------------時(shí)基結(jié)構(gòu)體初始化-------------------------*/// 配置周期// 自動(dòng)重裝載寄存器的值,累計(jì)TIM_Period+1個(gè)頻率后產(chǎn)生一個(gè)更新或者中斷TIM_TimeBaseStructure.TIM_Period=GENERAL_TIM_Period; // 驅(qū)動(dòng)CNT計(jì)數(shù)器的時(shí)鐘 = Fck_int/(psc+1)TIM_TimeBaseStructure.TIM_Prescaler= GENERAL_TIM_Prescaler; // 時(shí)鐘分頻因子 ,配置死區(qū)時(shí)間時(shí)需要用到TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; // 計(jì)數(shù)器計(jì)數(shù)模式,設(shè)置為向上計(jì)數(shù)TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 重復(fù)計(jì)數(shù)器的值,沒用到不用管TIM_TimeBaseStructure.TIM_RepetitionCounter=0; // 初始化定時(shí)器TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);/*--------------------輸出比較結(jié)構(gòu)體初始化-------------------*/ // 配置為PWM模式TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;// 輸出使能TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;// 輸出通道電平極性配置 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;// 輸出比較通道 1TIM_OCInitStructure.TIM_Pulse = 0;TIM_OC1Init(GENERAL_TIM, &TIM_OCInitStructure);TIM_OC1PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);// 輸出比較通道 2TIM_OCInitStructure.TIM_Pulse = 0;TIM_OC2Init(GENERAL_TIM, &TIM_OCInitStructure);TIM_OC2PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);// 輸出比較通道 3TIM_OCInitStructure.TIM_Pulse = 0;TIM_OC3Init(GENERAL_TIM, &TIM_OCInitStructure);TIM_OC3PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);// 輸出比較通道 4TIM_OCInitStructure.TIM_Pulse = 0;TIM_OC4Init(GENERAL_TIM, &TIM_OCInitStructure);TIM_OC4PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);// 使能計(jì)數(shù)器TIM_Cmd(GENERAL_TIM, ENABLE); }void GENERAL_TIM_Init(void) {GENERAL_TIM_GPIO_Config();GENERAL_TIM_Mode_Config(); }//小車左轉(zhuǎn) void PWM_CarLeft(void){TIM_SetCompare1(GENERAL_TIM,0);TIM_SetCompare2(GENERAL_TIM,0);TIM_SetCompare3(GENERAL_TIM,4000);TIM_SetCompare4(GENERAL_TIM,4000); }//小車右轉(zhuǎn) void PWM_CarRight(void){TIM_SetCompare1(GENERAL_TIM,4000);TIM_SetCompare2(GENERAL_TIM,4000);TIM_SetCompare3(GENERAL_TIM,0);TIM_SetCompare4(GENERAL_TIM,0); }//小車最大速度 void PWM_CarMaxGo(void){TIM_SetCompare1(GENERAL_TIM,0);TIM_SetCompare2(GENERAL_TIM,0);TIM_SetCompare3(GENERAL_TIM,0);TIM_SetCompare4(GENERAL_TIM,0); }/*********************************************END OF FILE**********************/
    • 小車轉(zhuǎn)向的原理是跟坦克的一樣,通過降低轉(zhuǎn)向邊的輪子速度來實(shí)現(xiàn)。而控制轉(zhuǎn)速就要用到PWM波來減少或增多電機(jī)的通斷時(shí)間(其實(shí)是驅(qū)動(dòng)板的電機(jī)使能引腳)。
    • 轉(zhuǎn)向函數(shù)的封裝

    PS:完整的程序太多了,最好下載下來慢慢看。

    藍(lán)牙遙控器

    做到這里就剩只藍(lán)牙遙控器的配置了,軟件呢隨便哪個(gè)都行,只要能收發(fā)數(shù)據(jù)就行。
    不過我推薦用我這個(gè),因?yàn)殚L得好看。
    下載地址,提取碼:kvar。此軟件為安卓,ios沒有

  • 查看指令
    單片機(jī)復(fù)位的時(shí)候會(huì)通過藍(lán)牙發(fā)送這些數(shù)據(jù),用手機(jī)連上藍(lán)牙然后復(fù)位單片機(jī)就可以看到了。
  • printf("-----指令-----\n
    0x01:小車后退\n
    0x02:小車向左\n
    0x03:小車向右\n
    0x04:小車前進(jìn)\n
    0x05:小車剎車\n
    0x06:電機(jī)停止\n
    0x07:小車逆時(shí)針\n
    0x08:小車轉(zhuǎn)向停止\n
    0x09:小車順時(shí)針\n");

    • 單片機(jī)就是通過這些十六進(jìn)制的數(shù)據(jù)來控制小車的運(yùn)動(dòng),只要將遙控器上的按鍵對(duì)應(yīng)這些數(shù)據(jù)就行了。
  • 按鍵說明
  • 按鍵配置
    按鍵配置簡(jiǎn)單,只要根據(jù)指令來配置就好了,我就舉幾個(gè)例子。
    • 前進(jìn)
    • 左轉(zhuǎn)
    • 剎車
    • 原地順時(shí)針 接下來可以開車上路了
      祝你好運(yùn)!!!

    總結(jié)

    以上是生活随笔為你收集整理的STM32智能遥控小车,超详细-附下载直接可以用,双电源跑贼快!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。