FMUSER Wirless edastab videot ja heli lihtsamalt!

[meiliga kaitstud] WhatsApp + 8618078869184
Keel

    STM32 TIM encoder mode to collect encoder signals

     

    What is orthogonal decoding? For common incremental encoders and optical encoders, a slotted disk is used, one side is the emitting end of the light, and the phototransistor is on the opposite side. When the disc rotates, the optical path is blocked, and the resulting pulse indicates the rotation and direction of the shaft. The usual saying is that a 1000-line encoder will generate 1000 square wave pulses after one revolution. 1000 grids are engraved on the horse plate, and 1000 spaces are hollowed out in the middle. For example, it seems a bit verbose. Go straight to the topic, as to what is an encoder or a search engine, it is clear. Incremental encoders usually have A and B two-phase signals with a phase difference of 90°, so it is also called quadrature. There is also a reset signal that is a mechanical reset, that is, after a revolution, the reset signal has a transition edge. The details are shown in the figure below: Encoder Therefore, quadrature decoding is to decode the A and B two-phase square wave signals, detect the phase, and the number of pulses and steering. Of course, the speed, acceleration, and rotation to the corresponding position can also be calculated. Encoder interface mode Refer to the "STM32 Reference Manual Chinese Version", you can see that for the common functions in the TIM timer, the encoder interface mode is generally supported, and the following configuration is carried out with the manual and standard library. Standard library interface First see the interface in the standard library code stm32f10x_tim.h, first simply analyze the following source code and find the following four data types: TIM_TimeBaseInitTypeDef: Time base unit, configure timer prescaler parameters, counter mode (overflow/underflow), cycle frequency and division coefficient; TIM_OCInitTypeDef: Oscillation output unit, which can be used to generate PWM waveform; TIM_ICInitTypeDef: Input capture unit, which can be used to detect the input of the encoder signal; TIM_BDTRInitTypeDef: applicable to TIM1 and TIM8 as a structure for inserting dead time configuration; Therefore, to combine the above, you only need to pay attention to the time base unit and the input capture unit. The following is a brief explanation of its members and their comments; TIM_TimeBaseInitTypeDef typedef struct { uint16_t TIM_Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock. This parameter can be a number between 0x0000 and 0xFFFF */ uint16_t TIM_CounterMode; /*!< Specifies the counter mode. This parameter can be a value of @ref TIM_Counter_Mode */ uint16_t TIM_Period; /*!< Specifies the period value to be loaded into the active Auto-Reload Register at the next update event. This parameter must be a number between 0x0000 and 0xFFFF. */ uint16_t TIM_ClockDivision; /*!< Specifies the clock division. This parameter can be a value of @ref TIM_Clock_Division_CKD */ uint8_t TIM_RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter reaches zero, an update event is generated and counting restarts from the RCR value (N). This means in PWM mode that (N+1) corresponds to: -the number of PWM periods in edge-aligned mode -the number of half PWM period in center-aligned mode This parameter must be a number between 0x00 and 0xFF. @note This parameter is valid only for TIM1 and TIM8. */ } TIM_TimeBaseInitTypeDef; TIM_ICInitTypeDef typedef struct { uint16_t TIM_Channel; /*!< Specifies the TIM channel. This parameter can be a value of @ref TIM_Channel */ uint16_t TIM_ICPolarity; /*!< Specifies the active edge of the input signal. This parameter can be a value of @ref TIM_Input_Capture_Polarity */ uint16_t TIM_ICSelection; /*!< Specifies the input. This parameter can be a value of @ref TIM_Input_Capture_Selection */ uint16_t TIM_ICPrescaler; /*!< Specifies the Input Capture Prescaler. This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ uint16_t TIM_ICFilter; /*!< Specifies the input capture filter. This parameter can be a number between 0x0 and 0xF */ } TIM_ICInitTypeDef; Register interface For configuration registers, you can directly refer to the encoder interface mode in Chapter 13 of the "STM32 Reference Manual Chinese Edition". For details, please refer to the manual. Here, combining the structure of the previous standard library, the key content will be refined, encoder interface Probably need to configure the following items: Configuration of encoder interface mode: Rising edge trigger Falling edge trigger Edge trigger Polarity configuration Filter configuration The following is the official configuration scheme: ● CC1S=’01’ (TIMx_CCMR1 register, IC1FP1 is mapped to TI1) ● CC2S=’01’ (TIMx_CCMR2 register, IC2FP2 is mapped to TI2) ● CC1P=’0’ (TIMx_CCER register, IC1FP1 is not inverted, IC1FP1=TI1) ● CC2P=’0’ (TIMx_CCER register, IC2FP2 is not inverted, IC2FP2=TI2) ● SMS=’011’ (TIMx_SMCR register, all inputs are valid on rising and falling edges). ● CEN=’1’ (TIMx_CR1 register, counter enable) This means that the counter TIMx_CNT register only counts continuously between 0 and the autoload value of the TIMx_ARR register (according to the direction, either 0 to ARR counts, or ARR to 0 counts) number). The details are shown in the figure below; Official quadrature decoding timing Detection method In summary, if you want to get the speed, and direction: At an interval of fixed time Ts, read the value of the TIMx_CNT register, assuming it is a 1000-line encoder, the speed: n = 1/Ts*TIMx_CNT*1000; The direction of rotation is judged according to the counting direction of TIMx_CNT. With different polarities, the growth direction of TIMx_CNT is also different. Here we need to distinguish; Standard library configuration The following is the code based on the standard library V3.5, based on the STM32F103 series of single-chip microcomputers, the hardware interface: TIM3 channel 1, Pin6 and Pin7; Mechanical reset signal; The number of pulses currently encoded can be read through the encoder_get_signal_cnt interface, and the M method is used to measure the speed; Regarding the counter overflow situation The TIM3_IRQHandler interrupt detects the direction in which the timer may overflow by judging the overflow and underflow flags in the SR register, and uses N to make a compensation. /* QPEA--->PA6/TIM3C1 QPEB--->PA7/TIM3C1 --------------------------- TIM3_UPDATE_IRQ EXTI_PA5 --------------------------- */ typedef enum{ FORWARD = 0, BACK }MOTO_DIR; /** * @brief init encoder pin for pha phb and zero * and interrpts */ void encoder_init(void); /** * @brief get encoder capture signal counts */ int32_t encoder_get_signal_cnt(void); /** * @brief get encoder running direction */ MOTO_DIR encoder_get_motor_dir(void); #endif #include "encoder.h" #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_tim.h" #include "stm32f10x_exti.h" #include "misc.h" #define SAMPLE_FRQ 10000L #define SYS_FRQ 72000000L /* Private typedef ---------------------------------------------- -------------*/ /* Private define ---------------------------------------------- --------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ volatile int32_t N = 0; volatile uint32_t EncCnt = 0; /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ static void encoder_pin_init(void){ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } static void encoder_rcc_init(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); } static void encoder_tim_init(void){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; TIM_TimeBaseStructure.TIM_Period = ENCODER_MAX_CNT; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising); //must clear it flag before enabe interrupt TIM_ClearFlag(TIM3,TIM_FLAG_Update); TIM_ITConfig(TIM3,TIM_IT_Update, ENABLE); //TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE); TIM_SetCounter(TIM3,ENCODER_ZERO_VAL); TIM_ICInit(TIM3, &TIM_ICInitStructure); TIM_Cmd(TIM3, ENABLE); // TIM3->CCMR1 |= 0x0001; // TIM3->CCMR2 |= 0x0001; // TIM3->CCER &= ~(0x0001<<1); // TIM3->CCER &= ~(0x0001<<5); // TIM3->SMCR |= 0x0003; // TIM3->CR1 |= 0x0001; } /** * @brief Configure the nested vectored interrupt controller. * @param None * @retval None */ static void encoder_irq_init(void) { NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* Enable the TIM3 global Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource5); EXTI_InitStructure.EXTI_Line = EXTI_Line5; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void encoder_init(void){ encoder_rcc_init(); encoder_pin_init(); encoder_irq_init(); encoder_tim_init(); } // 机械复位信号 void EXTI9_5_IRQHandler(void){ if(EXTI_GetITStatus(EXTI_Line5) == SET){ } EXTI_ClearITPendingBit(EXTI_Line5); } MOTO_DIR encoder_get_motor_dir(void) { if((TIM3->CR1 & 0x0010) == 0x0010){ return FORWARD; }else{ return BACK; } } int32_t encoder_get_signal_cnt(void){ int32_t cnt = 0; if(TIM3->CNT > ENCODER_ZERO_VAL){ EncCnt = cnt = TIM3->CNT - ENCODER_ZERO_VAL; }else{ EncCnt = cnt = ENCODER_ZERO_VAL - TIM3->CNT; } TIM_SetCounter(TIM3,ENCODER_ZERO_VAL); return cnt; } /******************************************************************************/ /* STM32F10x Peripherals Interrupt Handlers */ /******************************************************************************/ /** * @brief This function handles TIM3 global interrupt request. * @param None * @retval None */ void TIM3_IRQHandler(void) { uint16_t flag = 0x0001 << 4; if(TIM3->SR&(TIM_FLAG_Update)){ //down mode if((TIM3->CR1 & flag) == flag){ N--; }else{ //up mode N++; } } TIM3->SR&=~(TIM_FLAG_Update); } TIM3 global interrupt request.

     

     

     

     

     

     

    Kui kaugele (pikk) saatja katta?

    Tegelik võimsus sõltub paljudest teguritest. Tõeline kaugus põhineb antenni paigaldamisel kõrgus, antennivõimendus, kasutades keskkonnas, nagu hoones ja muud takistused, tundlikkus vastuvõtja, antenn vastuvõtja. Paigaldamine antenn rohkem kõrge ja kasutades maal, kauguse palju kaugemale.

    Näide 5W FM-saatja kasutamine linna ja kodulinna:

    Mul on USA kliendile kasutamiseks 5W fm transmitter koos GP antenn oma kodulinnas, ja ta katsetada seda autot, see katab 10km (6.21mile).

    Ma testida 5W fm transmitter koos GP antenn minu kodulinnas, seda katavad umbes 2km (1.24mile).

    Ma testida 5W fm transmitter koos GP antenn Guangzhou linn, seda katavad umbes ainult 300meter (984ft).

    Allpool on umbes vahemikus erineva võimsusega FM saatjad. (Vahemik on läbimõõduga)

    0.1W ~ 5W FM saatja: 100M ~ 1KM

    5W ~ 15W FM Ttransmitter: 1KM ~ 3KM

    15W ~ 80W FM saatja: 3KM ~ 10KM

    80W ~ 500W FM saatja: 10KM ~ 30KM

    500W ~ 1000W FM saatja: 30KM ~ 50KM

    1KW ~ 2KW FM saatja: 50KM ~ 100KM

    2KW ~ 5KW FM saatja: 100KM ~ 150KM

    5KW ~ 10KW FM saatja: 150KM ~ 200KM

    Kuidas meiega ühendust võtta saatja?

    Helista mulle + 8618078869184 OR
    Saada mulle [meiliga kaitstud]
    1.How kaugele sa tahad, et katta läbimõõduga?
    2.How pikk teie torn?
    3.Where sa pärit oled?
    Ja me teile rohkem professionaalset nõu.

    Meist

    FMUSER.ORG on süsteemi integreerimisfirma, mis keskendub raadiovõrgu traadita andmeedastusele / stuudio video audio seadmetele / voogedastusele ja andmetöötlusele. Pakume kõike alates nõuandest ja konsultatsioonidest raami integreerimise ja paigaldamise, kasutuselevõtu ja koolituse kaudu.
     
    Pakume FM-saatjat, analoogtelevisiooni saatjat, digitaaltelevisiooni saatjat, VHF-i UHF-saatjat, antenne, koaksiaalkaabliühendusi, STL-i, õhu töötlemisel, stuudio levitamistooteid, RF-signaali jälgimist, RDS-kodeerijaid, heliprotsessoreid ja kaug-saidi juhtseadmeid IPTV tooted, Video / Audio Encoder / Decoder, mis on ette nähtud nii suurte rahvusvaheliste ringhäälinguvõrkude kui ka väikeste erajaamade vajadustele.
     
    Meie lahendusel on FM-raadiojaam / analoog-TV-jaam / digi-TV-jaam / audio-videostuudioseadmed / stuudiosaatja link / saatja telemeetriasüsteem / hotelli telesüsteem / IPTV-otseülekanne / voogesituse otseülekanne / videokonverents / CATV-ringhäälingusüsteem.
     
    Me kasutame kõigi süsteemide jaoks kõrgtehnoloogilisi tooteid, sest me teame, et kõrge usaldusväärsus ja kõrge jõudlus on süsteemi ja lahenduse jaoks nii olulised. Samal ajal peame ka tagama, et meie toodete süsteem oleks väga mõistliku hinnaga.
     
    Meil on avalike ja kaubanduslike ringhäälinguorganisatsioonide, telekommunikatsioonioperaatorite ja reguleerivate asutuste kliente ning pakume lahendusi ja tooteid ka sadadele väiksematele, kohalikele ja kogukondlikele ringhäälinguorganisatsioonidele.
     
    FMUSER.ORG on eksportinud üle 15 aasta ja tal on kliente kogu maailmas. 13-aastase kogemusega selles valdkonnas on meil professionaalne meeskond kliendi igasuguste probleemide lahendamiseks. Pühendume professionaalsete toodete ja teenuste äärmiselt mõistliku hinna pakkumisel.
    Kontakt e-post: [meiliga kaitstud]

    meie Factory

    Meil on moderniseerimine tehases. Olete oodatud külastama meie tehases kui sa tuled Hiinas.

    Praegu on juba 1095 kliendid üle maailma külastanud meie Guangzhou Tianhe kontoris. Kui sa tuled Hiinas, olete oodatud meile külla.

    õiglases

    See on meie osalemine 2012 Global Sources Hong Kong Electronics Fair . Kliendid üle kogu maailma Lõpuks on võimalus kokku saada.

    Kus on Fmuser?

    Võite neid numbreid otsida " 23.127460034623816,113.33224654197693 "Google'i kaardilt leiate meie fmuseri kontori.

    FMUSER Guangzhou asukoht on Tianhe piirkond, mis on keskel Canton . väga lähedal Euroopa Canton Fair , Guangzhou raudteejaamas, xiaobei tee ja dashatou Ainult vaja 10 minuti kui võtta TAXI . Tere sõbrad üle maailma, et külastada ja rääkida.

    Kontakt: Sky Blue
    Mobiiltelefon: + 8618078869184
    WhatsApp: + 8618078869184
    Wechat: + 8618078869184
    E-mail: [meiliga kaitstud]
    QQ: 727926717
    Skype: sky198710021
    Aadress: No.305 Room HuiLan Building No.273 Huanpu Road Guangzhou Hiina Zip: 510620

    Inglise: Aktsepteerime kõiki makseid, näiteks PayPal, krediitkaart, Western Union, Alipay, Money Bookers, T / T, LC, DP, DA, OA, Payoneer. Kui teil on küsimusi, võtke minuga ühendust [meiliga kaitstud] või WhatsApp + 8618078869184

    • PayPal.  www.paypal.com

      Soovitame kasutada Paypal osta meie esemed, PayPal on turvaline viis osta Internetis.

      Iga meie kaubaartiklite lehekülje allosas peal on paypal logo maksta.

      Krediitkaart.Kui sul ei ole PayPal, kuid sa pead krediitkaarti, siis võib ka klõpsata Yellow PayPal nuppu maksma oma krediitkaardi.

      -------------------------------------------------- -------------------

      Aga kui sa ei ole krediitkaarti ja ei pea PayPal konto või raskelt sai paypal accout, võite kasutada järgmisi:

      Western Union.  www.westernunion.com

       

      Maksta Western Union mulle:

      Eesnimi / eesnimi: Yingfeng
      Perekonnanimi / perekonnanimi / perekonnanimi: Zhang
      Täielik nimi: Yingfeng Zhang
      Riik: Hiina
      Linn: Guangzhou 

      -------------------------------------------------- -------------------

      T / T.  maksta T / T (pangaülekanne / telegrammülekanne / Bank Transfer)
       
      Esimene Panga teave (ettevõtte konto):
      SWIFT BIC: BKCHHKHHXXX
      Panga nimi: HIINA (HONG KONG) BANK OF HONG KONG, HONG KONG
      Panga aadress: HIINA TOBI BANK, 1 AED ROAD, CENTRAL, HONG KONG
      PANGA KOOD: 012
      Konto nimi: FMUSER INTERNATIONAL GROUP LIMITED
      Arveldusarve nr. : 012-676-2-007855-0
      -------------------------------------------------- -------------------
      Teine Panga TEAVE (ETTEVÕTTE KONTO):
      Saaja: Fmuser International Group Inc
      Konto number: 44050158090900000337
      Saaja pank: Hiina Ehituspanga Guangdongi filiaal
      SWIFT-kood: PCBCCNBJGDX
      Aadress: NO.553 Tianhe Road, Guangzhou, Guangdong, Tianhe piirkond, Hiina
      ** Märkus. Kui kannate raha meie pangakontole, ÄRGE kirjutage märkuste piirkonda midagi, vastasel juhul ei saa me valitsuse rahvusvahelise kaubanduse poliitika tõttu makset kätte.

    * See saata 1-2 tööpäeva jooksul, kui makse selge.

    * Saadame selle oma paypal aadressi. Kui soovite muuta aadress, saatke oma õige aadress ja telefoni number minu e-posti [meiliga kaitstud]

    * Kui paketid on alla 2kg, me vedada posti teel lennupostiga, see võtab aega umbes 15-25days oma käsi.

    Kui pakend on rohkem kui 2kg, me laeva kaudu EMS, DHL, UPS, FedEx kiire kullerpostiteenuse, see võtab aega umbes 7 ~ 15days oma käsi.

    Kui pakki üle 100kg saadame kaudu DHL või lennutranspordiga. See võtab umbes 3 ~ 7days oma käsi.

    Kõik pakendid on vormi Hiina Guangzhou.

    * Pakett saadetakse kingitusena ja deklareeritakse nii vähe kui võimalik, ostjal pole vaja "MAKSU" eest maksta.

    * Pärast laeva, saadame teile e-kirja ja teile jälgimise numbri.

    Garantii jaoks.
    Võtke meiega ühendust --- >> Tagastage toode meile --- >> Võtke vastu ja saatke uus asendaja.

    Nimi: Liu Xiaoxia
    Aadress: 305Fang HuiLanGe HuangPuDaDaoXi 273Hao TianHeQu Guangzhou Hiinas.
    ZIP: 510620
    Telefon: + 8618078869184

    Palun pöörduge tagasi aadress ja kirjuta oma paypal aadressi, nime, probleemi märkus:

    Vaata kõiki Küsimus

    hüüdnimi

    E-POST

    Küsimused

      Üllatuse saamiseks sisestage e-posti aadress

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> afrikaans
      sq.fmuser.org -> albaania keel
      ar.fmuser.org -> araabia
      hy.fmuser.org -> Armeenia
      az.fmuser.org -> aserbaidžaanlane
      eu.fmuser.org -> baski keel
      be.fmuser.org -> valgevenelane
      bg.fmuser.org -> Bulgaaria
      ca.fmuser.org -> katalaani keel
      zh-CN.fmuser.org -> hiina (lihtsustatud)
      zh-TW.fmuser.org -> Hiina (traditsiooniline)
      hr.fmuser.org -> horvaadi keel
      cs.fmuser.org -> tšehhi
      da.fmuser.org -> taani keel
      nl.fmuser.org -> Hollandi
      et.fmuser.org -> eesti keel
      tl.fmuser.org -> filipiinlane
      fi.fmuser.org -> soome keel
      fr.fmuser.org -> Prantsusmaa
      gl.fmuser.org -> galicia keel
      ka.fmuser.org -> gruusia keel
      de.fmuser.org -> saksa keel
      el.fmuser.org -> Kreeka
      ht.fmuser.org -> Haiti kreool
      iw.fmuser.org -> heebrea
      hi.fmuser.org -> hindi
      hu.fmuser.org -> Ungari
      is.fmuser.org -> islandi keel
      id.fmuser.org -> indoneesia keel
      ga.fmuser.org -> iiri keel
      it.fmuser.org -> Itaalia
      ja.fmuser.org -> jaapani keel
      ko.fmuser.org -> korea
      lv.fmuser.org -> läti keel
      lt.fmuser.org -> Leedu
      mk.fmuser.org -> makedoonia
      ms.fmuser.org -> malai
      mt.fmuser.org -> malta keel
      no.fmuser.org -> Norra
      fa.fmuser.org -> pärsia keel
      pl.fmuser.org -> poola keel
      pt.fmuser.org -> portugali keel
      ro.fmuser.org -> Rumeenia
      ru.fmuser.org -> vene keel
      sr.fmuser.org -> serbia
      sk.fmuser.org -> slovaki keel
      sl.fmuser.org -> Sloveenia
      es.fmuser.org -> hispaania keel
      sw.fmuser.org -> suahiili keel
      sv.fmuser.org -> rootsi keel
      th.fmuser.org -> Tai
      tr.fmuser.org -> türgi keel
      uk.fmuser.org -> ukrainlane
      ur.fmuser.org -> urdu
      vi.fmuser.org -> Vietnam
      cy.fmuser.org -> kõmri keel
      yi.fmuser.org -> Jidiši

       
  •  

    FMUSER Wirless edastab videot ja heli lihtsamalt!

  • Saada sõnum

    Aadress:
    Nr 305 tuba HuiLan Building No.273 Huanpu Road Guangzhou, Hiina 510620

    E-mail:
    [meiliga kaitstud]

    Tel / WhatApps:
    + 8618078869184

  • Kategooriad

  • Uudiskiri

    ESIMENE VÕI TÄIELIK NIMI

    E-mail

  • paypal lahendus  Western UnionBank of China
    E-mail:[meiliga kaitstud]   WhatsApp: +8618078869184 Skype: sky198710021 Vestle minuga
    Copyright 2006-2020 Powered By www.fmuser.org

    Võta meiega ühendust