娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

CAN總線學(xué)習(xí)筆記|STM32的CAN環(huán)回測(cè)試

發(fā)布者:DreamBig123最新更新時(shí)間:2024-08-30 來(lái)源: elecfans關(guān)鍵字:CAN總線  STM32 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

CAN基礎(chǔ)知識(shí)介紹文中介紹了CAN協(xié)議的基礎(chǔ)知識(shí),以及STM32F4芯片的CAN控制器相關(guān)知識(shí),下面將通過(guò)實(shí)例,利用STM32CubeMX圖形化配置工具,來(lái)實(shí)現(xiàn)CAN通訊的環(huán)回測(cè)試


1. STM32CubeMX配置

CAN是掛載在APB1總線上,設(shè)置PCLK1時(shí)鐘頻率到最大45MHz

1d5add0530f2846b426704122b9be094_wKgaomToHQuAJMq8AAGj6dB-qB0661.png

激活CAN1,配置位時(shí)序參數(shù),其他基本參數(shù)以及工作模式(此處設(shè)置為L(zhǎng)oopback環(huán)回模式)

b717ecfec0f87e9a3d6d6dcce8502ff2_wKgaomToHQuAQ6DoAALGSxX6keY859.png

CAN波特率的計(jì)算公式:只需要知道BS1和BS2的設(shè)置,以及APB1的時(shí)鐘頻率,就可以方便的計(jì)算出波特率。比如設(shè)置TS1=8、TS2=6和BRP=6,在APB1頻率為45Mhz的條件下,即可得到CAN通信的波特率=45000/6/(8+6+1)=500Kbps

2e5c7548-8c00-11ed-bfe3-dac502259ad0.png


激活USART1作為調(diào)試串口,配置相關(guān)LED對(duì)應(yīng)的GPIO引腳作為指示燈


2.MDK-ARM編程


2.1 幾個(gè)重要的結(jié)構(gòu)體


主控寄存器 CAN_MCR:負(fù)責(zé)管理 CAN 的工作模式


typedefstruct

{

uint32_tPrescaler;/*配置CAN外設(shè)的時(shí)鐘分頻,可設(shè)置為1-1024*/

uint32_tMode;/*配置CAN的工作模式,回環(huán)或正常模式*/

uint32_tSyncJumpWidth;/*配置SJW極限值*/

uint32_tTimeSeg1;/*配置BS1段長(zhǎng)度*/

uint32_tTimeSeg2;/*配置BS2段長(zhǎng)度*/

FunctionalStateTimeTriggeredMode; /*是否使能TTCM時(shí)間觸發(fā)功能*/

FunctionalStateAutoBusOff;    /*是否使能ABOM自動(dòng)離線管理功能*/

FunctionalStateAutoWakeUp;      /*是否使能AWUM自動(dòng)喚醒功能*/

FunctionalStateAutoRetransmission;/*是否使能NART自動(dòng)重傳功能*/

FunctionalStateReceiveFifoLocked;/*是否使能RFLM鎖定FIFO功能*/

FunctionalStateTransmitFifoPriority;/*配置TXFP報(bào)文優(yōu)先級(jí)的判定方法*/

}CAN_InitTypeDef;

發(fā)送及接收頭結(jié)構(gòu)體:主要用于構(gòu)造發(fā)送報(bào)文,以及接收?qǐng)?bào)文。收發(fā)發(fā)文時(shí),需要自定義頭結(jié)構(gòu)體變量


typedefstruct

{

uint32_tStdId;/*存儲(chǔ)報(bào)文的標(biāo)準(zhǔn)標(biāo)識(shí)符11位,0-0x7FF.*/

uint32_tExtId;/*存儲(chǔ)報(bào)文的擴(kuò)展標(biāo)識(shí)符29位,0-0x1FFFFFFF.*/

uint32_tIDE;/*存儲(chǔ)IDE擴(kuò)展標(biāo)志*/

uint32_tRTR;/*存儲(chǔ)RTR遠(yuǎn)程幀標(biāo)志*/

uint32_tDLC;/*存儲(chǔ)報(bào)文數(shù)據(jù)段的長(zhǎng)度,0-8*/

FunctionalStateTransmitGlobalTime;

}CAN_TxHeaderTypeDef;


typedefstruct

{

uint32_tStdId;/*存儲(chǔ)報(bào)文的標(biāo)準(zhǔn)標(biāo)識(shí)符11位,0-0x7FF.*/

uint32_tExtId;/*存儲(chǔ)報(bào)文的擴(kuò)展標(biāo)識(shí)符29位,0-0x1FFFFFFF.*/

uint32_tIDE;/*存儲(chǔ)IDE擴(kuò)展標(biāo)志*/

uint32_tRTR;/*存儲(chǔ)RTR遠(yuǎn)程幀標(biāo)志*/

uint32_tDLC;/*存儲(chǔ)報(bào)文數(shù)據(jù)段的長(zhǎng)度,0-8*/

uint32_tTimestamp;

uint32_tFilterMatchIndex;

}CAN_RxHeaderTypeDef;


過(guò)濾器結(jié)構(gòu)體:STM32CubeMX不會(huì)初始化過(guò)濾器的相關(guān)內(nèi)容,需要自己添加

typedefstruct

{

uint32_tFilterIdHigh;/*CAN_FxR1寄存器的高16位*/

uint32_tFilterIdLow;/*CAN_FxR1寄存器的低16位*/

uint32_tFilterMaskIdHigh;/*CAN_FxR2寄存器的高16位*/

uint32_tFilterMaskIdLow;/*CAN_FxR2寄存器的低16位*/

uint32_tFilterFIFOAssignment;/*設(shè)置經(jīng)過(guò)篩選后數(shù)據(jù)存儲(chǔ)到哪個(gè)接收FIFO*/

uint32_tFilterBank;/*篩選器編號(hào),范圍0-27,CAN1是0-13,CAN2是14-27*/

uint32_tFilterMode;/*篩選器模式*/

uint32_tFilterScale;/*設(shè)置篩選器的尺度*/

uint32_tFilterActivation;/*是否使能本篩選器*/

uint32_tSlaveStartFilterBank;/*CAN2起始過(guò)濾器組*/

}CAN_FilterTypeDef;

2.2 程序編寫


生成工程后,打開(kāi)can.c文件,可見(jiàn)STM32CubeMX已經(jīng)對(duì)位時(shí)序參數(shù)、其他基本參數(shù)以及工作模式進(jìn)行了初始化。但是并沒(méi)有初始化過(guò)濾器的相關(guān)內(nèi)容,因此需要我們自己添加,并在CAN初始化時(shí)調(diào)用


//下面的設(shè)置只使能了FIFO0,并不過(guò)濾任何消息

voidCAN_Filter_Config(){

 CAN_FilterTypeDefsFilterConfig;


 sFilterConfig.FilterBank=0;//篩選器編號(hào),CAN1是0-13,CAN2是14-27

 sFilterConfig.FilterMode=CAN_FILTERMODE_IDMASK;//采用掩碼模式

 sFilterConfig.FilterScale=CAN_FILTERSCALE_32BIT;//設(shè)置篩選器的尺度,采用32位

 sFilterConfig.FilterIdHigh=0X0000;//過(guò)濾器ID高16位,即CAN_FxR1寄存器的高16位

 sFilterConfig.FilterIdLow=0X0000;//過(guò)濾器ID低16位,即CAN_FxR1寄存器的低16位

 sFilterConfig.FilterMaskIdHigh=0X0000;//過(guò)濾器掩碼高16位,即CAN_FxR2寄存器的高16位

 sFilterConfig.FilterMaskIdLow=0X0000;//過(guò)濾器掩碼低16位,即CAN_FxR2寄存器的低16位

 sFilterConfig.FilterFIFOAssignment=CAN_RX_FIFO0;//設(shè)置經(jīng)過(guò)篩選后數(shù)據(jù)存儲(chǔ)到哪個(gè)接收FIFO

 sFilterConfig.FilterActivation=ENABLE;//是否使能本篩選器

 sFilterConfig.SlaveStartFilterBank=14;//指定為CAN1分配多少個(gè)濾波器


 if(HAL_CAN_ConfigFilter(&hcan1,&sFilterConfig)!=HAL_OK)

 {

  Error_Handler();

 }

}

編寫發(fā)送和接收數(shù)據(jù)函數(shù):此處將格式固定為標(biāo)準(zhǔn)數(shù)據(jù)幀,ID為12

uint8_tCAN1_Send_Msg(uint8_t*msg,uint8_tlen){

 uint16_ti=0;

 uint32_ttxMailBox;

 uint8_tsend_buf[8];


 txHeader.StdId=12;

 txHeader.ExtId=12;

 txHeader.IDE=CAN_ID_STD;

 txHeader.RTR=CAN_RTR_DATA;

 txHeader.DLC=len;


 for(i=0;i< len; i++)

    send_buf[i] = msg[i];

 

  if(HAL_CAN_AddTxMessage(&hcan1, &txHeader, send_buf, &txMailBox) != HAL_OK)

    return 1; 

  return 0;

}


uint8_t CAN1_Recv_Msg(uint8_t *buf){

  uint16_t i = 0; 

  HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &rxHeader, buf);

 

  if(rxHeader.IDE == CAN_ID_STD)

    printf('StdId ID: %d

', rxHeader.StdId);

  else

    printf('ExtId ID: %d

', rxHeader.ExtId);

 

  printf('CAN IDE: %d

', rxHeader.IDE);

  printf('CAN RTR: %d

', rxHeader.RTR);

  printf('CAN DLC: %d

', rxHeader.DLC);

  printf('Recv Data: ');

 

  for(i = 0; i < rxHeader.DLC; i++)

    printf('%c',buf[i]);

 

  printf('

');

  return rxHeader.DLC;

}

默認(rèn)Cubemx生成的代碼并沒(méi)有can start,沒(méi)有調(diào)用HAL_CAN_Start(&hcan1) 來(lái)使能CAN,因此需要在CAN初始化代碼中添加

voidMX_CAN1_Init(void){

 ......

 /*USERCODEBEGINCAN1_Init2*/

 CAN_Filter_Config();

 HAL_CAN_Start(&hcan1);

/*USERCODEENDCAN1_Init2*/

}

主函數(shù)main.c中,代碼如下

intmain(void){

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_CAN1_Init();

MX_USART1_UART_Init();

/*USERCODEBEGIN2*/

 uint8_tret,i;

 printf('CANTesting....!

');

 uint8_ttxdata[8]={76,79,79,80,66,65,67,75};

 uint8_trxdata[8];

/*USERCODEEND2*/

/*Infiniteloop*/

/*USERCODEBEGINWHILE*/

while(1)

{

  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);

  HAL_Delay(1000);

  printf('StartSenddata...

');


  ret=CAN1_Send_Msg(txdata,8);

  if(ret==0)

    printf('CANSendsuccess!

');

  else

    printf('CANSendfailed!

');


  CAN1_Recv_Msg(rxdata);

  printf('+++++++++++++++++++++++++++++++

');

/*USERCODEENDWHILE*/

/*USERCODEBEGIN3*/

}

/*USERCODEEND3*/

}


3. 下載測(cè)試

編譯無(wú)誤后下載到開(kāi)發(fā)板,可以看到系統(tǒng)運(yùn)行時(shí)D1指示燈不斷閃爍,串口不斷的打印CAN環(huán)回測(cè)試的數(shù)據(jù)

2e70cc8c-8c00-11ed-bfe3-dac502259ad0.png


關(guān)鍵字:CAN總線  STM32 引用地址:CAN總線學(xué)習(xí)筆記|STM32的CAN環(huán)回測(cè)試

上一篇:基于STM32單片機(jī)的火災(zāi)防盜系統(tǒng)設(shè)計(jì)
下一篇:STM32H5開(kāi)發(fā)(4)----開(kāi)發(fā)板介紹

推薦閱讀最新更新時(shí)間:2025-04-23 19:05

stm32 調(diào)試can總線丟幀的問(wèn)題
問(wèn)題出現(xiàn)的背景 需要寫一個(gè)新的電機(jī)的驅(qū)動(dòng),使用can通訊,驅(qū)動(dòng)比較簡(jiǎn)單,很快就寫好了。自己?jiǎn)为?dú)測(cè)試一個(gè)電機(jī)的時(shí)候沒(méi)有問(wèn)題,正反轉(zhuǎn)測(cè)什么的都很正常。本以為事情會(huì)很順利,但是在測(cè)兩個(gè)電機(jī)的時(shí)候,卻發(fā)現(xiàn)很嚴(yán)重的問(wèn)題,經(jīng)常左電機(jī)不裝或者是右電機(jī)不轉(zhuǎn)。 問(wèn)題的解決步驟 方案一: 1. 遇到這種問(wèn)題通常都是加上一個(gè)延時(shí),覺(jué)得可能就是發(fā)的太快了,時(shí)許上可能有問(wèn)題,但是我們的系統(tǒng)是一個(gè)實(shí)時(shí)的系統(tǒng)延時(shí)的時(shí)間不能太長(zhǎng)。 2. 經(jīng)過(guò)測(cè)試發(fā)現(xiàn)加延時(shí)可能較小出現(xiàn)這種問(wèn)題的概率,但是不能解決這個(gè)問(wèn)題,最終車子還是無(wú)法正常運(yùn)行,沒(méi)辦法這個(gè)方案不行。 分析: 既然加延時(shí)不行的話,只能去找為什么電機(jī)不裝。使用can轉(zhuǎn)usb將數(shù)據(jù)抓出來(lái)之后,發(fā)
[單片機(jī)]
<font color='red'>stm32</font> 調(diào)試<font color='red'>can總線</font>丟幀的問(wèn)題
CAN總線BUS OFF狀態(tài)下發(fā)送緩沖區(qū)的處理策略
在現(xiàn)代汽車電子控制系統(tǒng)和工業(yè)自動(dòng)化領(lǐng)域,CAN(Controller Area Network)總線作為一種高效、可靠的通信協(xié)議,扮演著至關(guān)重要的角色。然而,在CAN網(wǎng)絡(luò)運(yùn)行過(guò)程中,由于各種內(nèi)外因素,節(jié)點(diǎn)可能會(huì)進(jìn)入BUS OFF狀態(tài),這是一種嚴(yán)重的總線錯(cuò)誤狀態(tài),節(jié)點(diǎn)因此被隔離出總線,停止發(fā)送和接收數(shù)據(jù)。本文將深入探討CAN總線BUS OFF狀態(tài)下發(fā)送緩沖區(qū)的處理策略,分析是否應(yīng)該清空發(fā)送緩沖區(qū),以及這一決策背后的技術(shù)考量。 一、CAN總線BUS OFF狀態(tài)概述 CAN總線的設(shè)計(jì)基于一套完善的錯(cuò)誤檢測(cè)與隔離機(jī)制。當(dāng)總線上連續(xù)出現(xiàn)數(shù)據(jù)錯(cuò)誤時(shí),CAN控制器內(nèi)部的錯(cuò)誤計(jì)數(shù)器會(huì)遞增。一旦錯(cuò)誤計(jì)數(shù)達(dá)到預(yù)設(shè)的閾值,將觸發(fā)BUS OFF狀態(tài),
[嵌入式]
can總線的故障波形有哪些
CAN總線(Controller Area Network)是一種用于汽車和工業(yè)自動(dòng)化領(lǐng)域的通信協(xié)議。它具有高可靠性、實(shí)時(shí)性和靈活性的特點(diǎn)。然而,在使用過(guò)程中,CAN總線也可能出現(xiàn)一些故障。本文將詳細(xì)介紹CAN總線的故障波形及其原因和解決方法。 故障波形概述 故障波形是指在CAN總線通信過(guò)程中,由于各種原因?qū)е碌臄?shù)據(jù)傳輸異常。故障波形的類型有很多,主要包括以下幾種: 1.1 信號(hào)干擾波形 信號(hào)干擾波形是指在CAN總線通信過(guò)程中,由于外部電磁干擾或其他原因?qū)е碌臄?shù)據(jù)傳輸異常。這種波形通常表現(xiàn)為數(shù)據(jù)包的某些位出現(xiàn)錯(cuò)誤,從而導(dǎo)致通信失敗。 1.2 碰撞波形 碰撞波形是指在CAN總線通信過(guò)程中,兩個(gè)或多個(gè)節(jié)點(diǎn)同時(shí)發(fā)送數(shù)據(jù),導(dǎo)致數(shù)據(jù)包發(fā)
[嵌入式]
如何用Pico示波器進(jìn)行CAN總線解碼分析
Pico示波器具有串行解碼的功能,能夠?qū)AN、FlexRay、I2C、I2S、SPI、LIN或UART等串行總線進(jìn)行解碼。Pico示波器比較適合做串行解碼,因?yàn)樗鼈兊纳疃却鎯?chǔ)器可以讓軟件采集較長(zhǎng)時(shí)間、不間斷的數(shù)據(jù),尤其是6000系列能夠在幾秒內(nèi)采集數(shù)千個(gè)數(shù)據(jù)幀存入到512M的樣本存儲(chǔ)器。下面將介紹如何用一個(gè)款Pico示波器進(jìn)行CAN總線數(shù)據(jù)解碼。 1關(guān)于CAN總線解碼 1.1 什么是CAN總線? 數(shù)據(jù)通信時(shí),物理線路上傳輸?shù)男盘?hào)是由一系列高低電平組成的,這些高低電平攜帶了我們所需要的信息,在數(shù)據(jù)接收端,我們需要將這些物理電平按照原始的編碼規(guī)則進(jìn)行解析,從而得到實(shí)際的物理信號(hào)。 CAN(控制器區(qū)域網(wǎng)絡(luò))總線是一種在汽車和工
[測(cè)試測(cè)量]
如何用Pico示波器進(jìn)行<font color='red'>CAN總線</font>解碼分析
基于SJA1000 IP核的CAN總線通信系統(tǒng)
引言 CAN(Controller Area Network)是擰制器局域網(wǎng)的簡(jiǎn)稱,是20世紀(jì)80年代初由德國(guó)BOSCH公司提出來(lái)的一種串行數(shù)據(jù)通信協(xié)議,主要用于解決當(dāng)時(shí)由于汽車功能越來(lái)越多而導(dǎo)致汽車內(nèi)部信號(hào)連接線增多的問(wèn)題。隨后CAN總線迅速發(fā)展,并于1993年被列入ISO國(guó)際標(biāo)準(zhǔn),形成了IOS 11898標(biāo)準(zhǔn)。至今,CAN總線已經(jīng)被公認(rèn)為幾種最有前途的現(xiàn)場(chǎng)總線之一,其應(yīng)用范圍也從當(dāng)初的汽車行業(yè)擴(kuò)展到了機(jī)械工業(yè)、交通工具、醫(yī)療設(shè)備、建筑、環(huán)境控制等諸多領(lǐng)域中。 伴隨著CAN總線的高速發(fā)展,用戶對(duì)其也提出了更高的要求。這無(wú)疑給CAN總線帶來(lái)發(fā)展機(jī)遇的同時(shí)也帶來(lái)了巨大的挑戰(zhàn)。在這種新形勢(shì)下,CAN總線原有的設(shè)計(jì)方案和技術(shù)就顯得有些力不
[嵌入式]
基于CAN總線智能節(jié)點(diǎn)的設(shè)計(jì)
??? CAN總線最早是德國(guó)的BOSCH公司為解決汽車的監(jiān)測(cè),控制系統(tǒng)而設(shè)計(jì)的。現(xiàn)在,已由汽車行業(yè)擴(kuò)展到過(guò)程工業(yè),機(jī)械工業(yè),機(jī)器人和樓宇自動(dòng)化等領(lǐng)域。總結(jié)各個(gè)領(lǐng)域中的應(yīng)用實(shí)例,CAN通信設(shè)計(jì)的關(guān)鍵在于各個(gè)通信模塊的設(shè)計(jì)與實(shí)現(xiàn)。通信信號(hào)一般有模擬量輸入/輸出(電壓電流采集模塊),開(kāi)關(guān)量輸入\輸出,數(shù)字量輸入\輸出(如計(jì)數(shù)器模塊)等。本文重點(diǎn)就模擬量輸入模塊和開(kāi)關(guān)量輸入模塊的設(shè)計(jì),采用具有CAN接口的C8051F550單片機(jī)作為系統(tǒng)設(shè)計(jì)的從節(jié)點(diǎn),用來(lái)采集模擬量和開(kāi)關(guān)量,實(shí)現(xiàn)與上位機(jī)中央控制器的通信。 1 CAN總線通信網(wǎng)絡(luò)系統(tǒng) ??? 如圖1所示,本設(shè)計(jì)中通過(guò)帶有終端器(120歐電阻)的通信介質(zhì)(雙絞線)將上位機(jī)和底層模塊連接
[嵌入式]
基于CAN總線通信的設(shè)計(jì)與開(kāi)發(fā)
隨著汽車上電子控制裝置越來(lái)越多,車身布線也愈來(lái)愈復(fù)雜,使得運(yùn)行可靠性降低,故障維修難度加大。為了提高信號(hào)的利用率,要求大批數(shù)據(jù)信息能在不同的電控單元中共享,同時(shí)汽車綜合控制系統(tǒng)中大量的控制信號(hào)也能實(shí)時(shí)進(jìn)行交換。但是,傳統(tǒng)的汽車電子系統(tǒng)采用串行通信的方法,如用SAE1587等標(biāo)準(zhǔn)來(lái)實(shí)施,通信速度較慢、傳遞的數(shù)據(jù)量少,遠(yuǎn)不能滿足高速通信的需求。 近年來(lái)CAN總線已發(fā)展成為汽車電子系統(tǒng)的主流總線,并有基于CAN總線通信協(xié)議的車輛應(yīng)用層通訊標(biāo)準(zhǔn)SAEJ1939 產(chǎn)生。 圖1 利用CAN總線開(kāi)發(fā)的純電動(dòng)車(EV)電控系統(tǒng)的通信網(wǎng)絡(luò)具有通信速率高、準(zhǔn)確、可靠性高的特點(diǎn),易于整車控制網(wǎng)絡(luò)的連接和管理,為傳感器信號(hào)、各個(gè)控制單元的計(jì)算信息和運(yùn)
[嵌入式]
雙冗余CAN總線模塊的設(shè)計(jì)與實(shí)現(xiàn)
  引言冗余技術(shù)有兩種方式:工作冗余和后備冗余。工作冗余是對(duì)關(guān)鍵設(shè)備以雙重或三重的原則來(lái)重復(fù)配置,這些設(shè)備同時(shí)處于工作運(yùn)行狀態(tài),工作過(guò)程中若某一臺(tái)設(shè)備出現(xiàn)故障,它會(huì)自動(dòng)脫離系統(tǒng),但并不影響系統(tǒng)的正常工作。后備冗余方式是使一臺(tái)設(shè)備投入運(yùn)行,另一臺(tái)冗余設(shè)備處于熱備用狀態(tài),但不投入運(yùn)行,在線運(yùn)行設(shè)備一旦出現(xiàn)故障,后備設(shè)備立即投入運(yùn)行。常用的冗余系統(tǒng)按其結(jié)構(gòu)可分為并聯(lián)系統(tǒng)。備用系統(tǒng)和表決系統(tǒng)3種。最簡(jiǎn)單的冗余設(shè)計(jì)是并聯(lián)裝置,其它方法還有串并聯(lián)或并串聯(lián)混合裝置和多數(shù)表決裝置等。   本文通過(guò)以上冗余技術(shù)的分析選擇,將其結(jié)合到CAN總線模塊的設(shè)計(jì)中,并在V×Works系統(tǒng)下設(shè)計(jì)了雙冗余驅(qū)動(dòng),通過(guò)測(cè)試,驗(yàn)證了本設(shè)計(jì)的有效性。   1 總
[嵌入式]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 库伦旗| 朝阳市| 伊春市| 兴义市| 新郑市| 隆尧县| 乌恰县| 广安市| 五河县| 绥阳县| 沁水县| 兴山县| 黄大仙区| 栖霞市| 吴堡县| 乳源| 金溪县| 冕宁县| 应用必备| 寿宁县| 昭觉县| 收藏| 阿巴嘎旗| 分宜县| 海安县| 丰县| 沈阳市| 通化县| 玉门市| 阜康市| 福贡县| 桑日县| 陆丰市| 神农架林区| 上虞市| 门源| 乌恰县| 石渠县| 长葛市| 石景山区| 内丘县|