]> git.piffa.net Git - arduino/blob - sheets/gyro/GY-52 Three-axis gyroscope sending data /Three-axis gyroscope sending data/GY-52 Test program/STM32-CODE/serial port output MPU-3050/serial/SRC/main.c
first commit
[arduino] / sheets / gyro / GY-52 Three-axis gyroscope sending data / Three-axis gyroscope sending data / GY-52 Test program / STM32-CODE / serial port output MPU-3050 / serial / SRC / main.c
1 \r
2 /*******************************************************************************\r
3 // GY-52 MPU3050 IIC²âÊÔ³ÌÐò\r
4 // Ê¹Óõ¥Æ¬»úSTM32F103C8T6\r
5 // ¾§Õñ£º8.00M\r
6 // ±àÒë»·¾³ Keil uVision4\r
7 // Ê±¼ä£º2011Äê9ÔÂ1ÈÕ\r
8 // ÓëÄ£¿éÁ¬½Ó GPIOB6->SCL GPIOB7->SDA      \r
9 // Ê¹ÓãºSTM32F103C8T6´®¿Ú1Á¬½ÓµçÄÔ\r
10 // µçÄÔ´®¿ÚÖúÊÖÏÔʾ£¬²¨ÌØÂÊ£º115200\r
11 // QQ£º531389319\r
12 *******************************************************************************/\r
13 \r
14 #include "stm32f10x_lib.h"\r
15 #include  <math.h>    //Keil library  \r
16 \r
17 GPIO_InitTypeDef GPIO_InitStructure;\r
18 ErrorStatus HSEStartUpStatus;\r
19 \r
20 #define   uchar unsigned char\r
21 #define   uint unsigned int     \r
22 \r
23 //¶¨ÒåMPU3050ÄÚ²¿µØÖ·********************\r
24 #define WHO         0x00\r
25 #define SMPL    0x15\r
26 #define DLPF    0x16\r
27 #define INT_C   0x17\r
28 #define INT_S   0x1A\r
29 #define TMP_H   0x1B\r
30 #define TMP_L   0x1C\r
31 #define GX_H    0x1D\r
32 #define GX_L    0x1E\r
33 #define GY_H    0x1F\r
34 #define GY_L    0x20\r
35 #define GZ_H    0x21\r
36 #define GZ_L    0x22\r
37 #define PWR_M   0x3E\r
38 //****************************\r
39 \r
40 #define MPU3050_Addr   0xD0       //¶¨ÒåÆ÷¼þÔÚIIC×ÜÏßÖеĴӵØÖ·,¸ù¾ÝALT  ADDRESSµØÖ·Òý½Å²»Í¬ÐÞ¸Ä\r
41 \r
42 unsigned char TX_DATA[4];        //ÏÔʾ¾Ý»º´æÇø\r
43 unsigned char BUF[10];       //½ÓÊÕÊý¾Ý»º´æÇø\r
44 char  test=0;                            //IICÓõ½\r
45 short T_X,T_Y,T_Z,T_T;           //X,Y,ZÖᣬζÈ\r
46 \r
47 //************************************\r
48 /*Ä£ÄâIIC¶Ë¿ÚÊä³öÊäÈ붨Òå*/\r
49 #define SCL_H         GPIOB->BSRR = GPIO_Pin_6\r
50 #define SCL_L         GPIOB->BRR  = GPIO_Pin_6 \r
51    \r
52 #define SDA_H         GPIOB->BSRR = GPIO_Pin_7\r
53 #define SDA_L         GPIOB->BRR  = GPIO_Pin_7\r
54 \r
55 #define SCL_read      GPIOB->IDR  & GPIO_Pin_6\r
56 #define SDA_read      GPIOB->IDR  & GPIO_Pin_7\r
57 \r
58 /* º¯ÊýÉêÃ÷ -----------------------------------------------*/\r
59 void RCC_Configuration(void);\r
60 void GPIO_Configuration(void);\r
61 void NVIC_Configuration(void);\r
62 void USART1_Configuration(void);\r
63 void WWDG_Configuration(void);\r
64 void Delay(u32 nTime);\r
65 void Delayms(vu32 m);  \r
66 /* ±äÁ¿¶¨Òå ----------------------------------------------*/\r
67 \r
68   /*******************************/\r
69 void DATA_printf(uchar *s,short temp_data)\r
70 {\r
71         if(temp_data<0){\r
72         temp_data=-temp_data;\r
73     *s='-';\r
74         }\r
75         else *s=' ';\r
76     *++s =temp_data/100+0x30;\r
77     temp_data=temp_data%100;     //È¡ÓàÔËËã\r
78     *++s =temp_data/10+0x30;\r
79     temp_data=temp_data%10;      //È¡ÓàÔËËã\r
80     *++s =temp_data+0x30;       \r
81 }\r
82 \r
83 /*******************************************************************************\r
84 * Function Name  : I2C_GPIO_Config\r
85 * Description    : Configration Simulation IIC GPIO\r
86 * Input          : None \r
87 * Output         : None\r
88 * Return         : None\r
89 ****************************************************************************** */\r
90 void I2C_GPIO_Config(void)\r
91 {\r
92   GPIO_InitTypeDef  GPIO_InitStructure; \r
93  \r
94   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;\r
95   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
96   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  \r
97   GPIO_Init(GPIOB, &GPIO_InitStructure);\r
98 \r
99   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;\r
100   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
101   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;\r
102   GPIO_Init(GPIOB, &GPIO_InitStructure);\r
103 }\r
104 \r
105 /*******************************************************************************\r
106 * Function Name  : I2C_delay\r
107 * Description    : Simulation IIC Timing series delay\r
108 * Input          : None\r
109 * Output         : None\r
110 * Return         : None\r
111 ****************************************************************************** */\r
112 void I2C_delay(void)\r
113 {\r
114                 \r
115    u8 i=30; //ÕâÀï¿ÉÒÔÓÅ»¯ËٶȠ £¬¾­²âÊÔ×îµÍµ½5»¹ÄÜдÈë\r
116    while(i) \r
117    { \r
118      i--; \r
119    }  \r
120 }\r
121 \r
122 void delay5ms(void)\r
123 {\r
124                 \r
125    int i=5000;  \r
126    while(i) \r
127    { \r
128      i--; \r
129    }  \r
130 }\r
131 /*******************************************************************************\r
132 * Function Name  : I2C_Start\r
133 * Description    : Master Start Simulation IIC Communication\r
134 * Input          : None\r
135 * Output         : None\r
136 * Return         : Wheather      Start\r
137 ****************************************************************************** */\r
138 bool I2C_Start(void)\r
139 {\r
140         SDA_H;\r
141         SCL_H;\r
142         I2C_delay();\r
143         if(!SDA_read)return FALSE;      //SDAÏßΪµÍµçƽÔò×ÜÏßæ,Í˳ö\r
144         SDA_L;\r
145         I2C_delay();\r
146         if(SDA_read) return FALSE;      //SDAÏßΪ¸ßµçƽÔò×ÜÏß³ö´í,Í˳ö\r
147         SDA_L;\r
148         I2C_delay();\r
149         return TRUE;\r
150 }\r
151 /*******************************************************************************\r
152 * Function Name  : I2C_Stop\r
153 * Description    : Master Stop Simulation IIC Communication\r
154 * Input          : None\r
155 * Output         : None\r
156 * Return         : None\r
157 ****************************************************************************** */\r
158 void I2C_Stop(void)\r
159 {\r
160         SCL_L;\r
161         I2C_delay();\r
162         SDA_L;\r
163         I2C_delay();\r
164         SCL_H;\r
165         I2C_delay();\r
166         SDA_H;\r
167         I2C_delay();\r
168\r
169 /*******************************************************************************\r
170 * Function Name  : I2C_Ack\r
171 * Description    : Master Send Acknowledge Single\r
172 * Input          : None\r
173 * Output         : None\r
174 * Return         : None\r
175 ****************************************************************************** */\r
176 void I2C_Ack(void)\r
177 {       \r
178         SCL_L;\r
179         I2C_delay();\r
180         SDA_L;\r
181         I2C_delay();\r
182         SCL_H;\r
183         I2C_delay();\r
184         SCL_L;\r
185         I2C_delay();\r
186 }   \r
187 /*******************************************************************************\r
188 * Function Name  : I2C_NoAck\r
189 * Description    : Master Send No Acknowledge Single\r
190 * Input          : None\r
191 * Output         : None\r
192 * Return         : None\r
193 ****************************************************************************** */\r
194 void I2C_NoAck(void)\r
195 {       \r
196         SCL_L;\r
197         I2C_delay();\r
198         SDA_H;\r
199         I2C_delay();\r
200         SCL_H;\r
201         I2C_delay();\r
202         SCL_L;\r
203         I2C_delay();\r
204\r
205 /*******************************************************************************\r
206 * Function Name  : I2C_WaitAck\r
207 * Description    : Master Reserive Slave Acknowledge Single\r
208 * Input          : None\r
209 * Output         : None\r
210 * Return         : Wheather      Reserive Slave Acknowledge Single\r
211 ****************************************************************************** */\r
212 bool I2C_WaitAck(void)   //·µ»ØΪ:=1ÓÐACK,=0ÎÞACK\r
213 {\r
214         SCL_L;\r
215         I2C_delay();\r
216         SDA_H;                  \r
217         I2C_delay();\r
218         SCL_H;\r
219         I2C_delay();\r
220         if(SDA_read)\r
221         {\r
222       SCL_L;\r
223           I2C_delay();\r
224       return FALSE;\r
225         }\r
226         SCL_L;\r
227         I2C_delay();\r
228         return TRUE;\r
229 }\r
230 /*******************************************************************************\r
231 * Function Name  : I2C_SendByte\r
232 * Description    : Master Send a Byte to Slave\r
233 * Input          : Will Send Date\r
234 * Output         : None\r
235 * Return         : None\r
236 ****************************************************************************** */\r
237 void I2C_SendByte(u8 SendByte) //Êý¾Ý´Ó¸ßλµ½µÍλ//\r
238 {\r
239     u8 i=8;\r
240     while(i--)\r
241     {\r
242         SCL_L;\r
243         I2C_delay();\r
244       if(SendByte&0x80)\r
245         SDA_H;  \r
246       else \r
247         SDA_L;   \r
248         SendByte<<=1;\r
249         I2C_delay();\r
250                 SCL_H;\r
251         I2C_delay();\r
252     }\r
253     SCL_L;\r
254 }  \r
255 /*******************************************************************************\r
256 * Function Name  : I2C_RadeByte\r
257 * Description    : Master Reserive a Byte From Slave\r
258 * Input          : None\r
259 * Output         : None\r
260 * Return         : Date From Slave \r
261 ****************************************************************************** */\r
262 unsigned char I2C_RadeByte(void)  //Êý¾Ý´Ó¸ßλµ½µÍλ//\r
263\r
264     u8 i=8;\r
265     u8 ReceiveByte=0;\r
266 \r
267     SDA_H;                              \r
268     while(i--)\r
269     {\r
270       ReceiveByte<<=1;      \r
271       SCL_L;\r
272       I2C_delay();\r
273           SCL_H;\r
274       I2C_delay();      \r
275       if(SDA_read)\r
276       {\r
277         ReceiveByte|=0x01;\r
278       }\r
279     }\r
280     SCL_L;\r
281     return ReceiveByte;\r
282\r
283 //ZRX          \r
284 //µ¥×Ö½ÚдÈë*******************************************\r
285 \r
286 bool Single_Write(unsigned char SlaveAddress,unsigned char REG_Address,unsigned char REG_data)               //void\r
287 {\r
288         if(!I2C_Start())return FALSE;\r
289     I2C_SendByte(SlaveAddress);   //·¢ËÍÉ豸µØÖ·+дÐźÅ//I2C_SendByte(((REG_Address & 0x0700) >>7) | SlaveAddress & 0xFFFE);//ÉèÖøßÆðʼµØÖ·+Æ÷¼þµØÖ· \r
290     if(!I2C_WaitAck()){I2C_Stop(); return FALSE;}\r
291     I2C_SendByte(REG_Address );   //ÉèÖõÍÆðʼµØÖ·      \r
292     I2C_WaitAck();      \r
293     I2C_SendByte(REG_data);\r
294     I2C_WaitAck();   \r
295     I2C_Stop(); \r
296     delay5ms();\r
297     return TRUE;\r
298 }\r
299 \r
300 //µ¥×Ö½Ú¶ÁÈ¡*****************************************\r
301 unsigned char Single_Read(unsigned char SlaveAddress,unsigned char REG_Address)\r
302 {   unsigned char REG_data;             \r
303         if(!I2C_Start())return FALSE;\r
304     I2C_SendByte(SlaveAddress); //I2C_SendByte(((REG_Address & 0x0700) >>7) | REG_Address & 0xFFFE);//ÉèÖøßÆðʼµØÖ·+Æ÷¼þµØÖ· \r
305     if(!I2C_WaitAck()){I2C_Stop();test=1; return FALSE;}\r
306     I2C_SendByte((u8) REG_Address);   //ÉèÖõÍÆðʼµØÖ·      \r
307     I2C_WaitAck();\r
308     I2C_Start();\r
309     I2C_SendByte(SlaveAddress+1);\r
310     I2C_WaitAck();\r
311 \r
312         REG_data= I2C_RadeByte();\r
313     I2C_NoAck();\r
314     I2C_Stop();\r
315     //return TRUE;\r
316         return REG_data;\r
317 \r
318 }                                                     \r
319 \r
320 /*\r
321 ********************************************************************************\r
322 ** º¯ÊýÃû³Æ £º RCC_Configuration(void)\r
323 ** º¯Êý¹¦ÄÜ £º Ê±ÖÓ³õʼ»¯\r
324 ** Êä    Èë     £º ÎÞ\r
325 ** Êä    ³ö     £º ÎÞ\r
326 ** ·µ    »Ø     £º ÎÞ\r
327 ********************************************************************************\r
328 */\r
329 void RCC_Configuration(void)\r
330 {   \r
331   /* RCC system reset(for debug purpose) */\r
332   RCC_DeInit();\r
333 \r
334   /* Enable HSE */\r
335   RCC_HSEConfig(RCC_HSE_ON);\r
336 \r
337   /* Wait till HSE is ready */\r
338   HSEStartUpStatus = RCC_WaitForHSEStartUp();\r
339 \r
340   if(HSEStartUpStatus == SUCCESS)\r
341   {\r
342     /* HCLK = SYSCLK */\r
343     RCC_HCLKConfig(RCC_SYSCLK_Div1); \r
344   \r
345     /* PCLK2 = HCLK */\r
346     RCC_PCLK2Config(RCC_HCLK_Div1); \r
347 \r
348     /* PCLK1 = HCLK/2 */\r
349     RCC_PCLK1Config(RCC_HCLK_Div2);\r
350 \r
351     /* Flash 2 wait state */\r
352     FLASH_SetLatency(FLASH_Latency_2);\r
353     /* Enable Prefetch Buffer */\r
354     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);\r
355 \r
356     /* PLLCLK = 8MHz * 9 = 72 MHz */\r
357     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);\r
358 \r
359     /* Enable PLL */ \r
360     RCC_PLLCmd(ENABLE);\r
361 \r
362     /* Wait till PLL is ready */\r
363     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)\r
364     {\r
365     }\r
366 \r
367     /* Select PLL as system clock source */\r
368     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);\r
369 \r
370     /* Wait till PLL is used as system clock source */\r
371     while(RCC_GetSYSCLKSource() != 0x08)\r
372     {\r
373     }\r
374   } \r
375    /* Enable GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */\r
376     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);\r
377         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD , ENABLE);\r
378         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF , ENABLE);\r
379         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG | RCC_APB2Periph_AFIO  , ENABLE);  \r
380 }\r
381 \r
382 /*\r
383 ********************************************************************************\r
384 ** º¯ÊýÃû³Æ £º GPIO_Configuration(void)\r
385 ** º¯Êý¹¦ÄÜ £º ¶Ë¿Ú³õʼ»¯\r
386 ** Êä    Èë     £º ÎÞ\r
387 ** Êä    ³ö     £º ÎÞ\r
388 ** ·µ    »Ø     £º ÎÞ\r
389 ********************************************************************************\r
390 */\r
391 void GPIO_Configuration(void)\r
392 {\r
393   GPIO_InitTypeDef GPIO_InitStructure;\r
394   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE  );\r
395    /* Configure USART1 Tx (PA.09) as alternate function push-pull */\r
396   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                              //     Ñ¡ÖйܽÅ9\r
397   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                // ¸´ÓÃÍÆÍìÊä³ö\r
398   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;              // ×î¸ßÊä³öËÙÂÊ50MHz\r
399   GPIO_Init(GPIOA, &GPIO_InitStructure);                                 // Ñ¡ÔñA¶Ë¿Ú\r
400     \r
401   /* Configure USART1 Rx (PA.10) as input floating */\r
402   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                      //Ñ¡ÖйܽÅ10\r
403   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //¸¡¿ÕÊäÈë\r
404   GPIO_Init(GPIOA, &GPIO_InitStructure);                                  //Ñ¡ÔñA¶Ë¿Ú\r
405 \r
406 }\r
407 \r
408 /*\r
409 ********************************************************************************\r
410 ** º¯ÊýÃû³Æ £º USART1_Configuration(void)\r
411 ** º¯Êý¹¦ÄÜ £º ´®¿Ú1³õʼ»¯\r
412 ** Êä    Èë     £º ÎÞ\r
413 ** Êä    ³ö     £º ÎÞ\r
414 ** ·µ    »Ø     £º ÎÞ\r
415 ********************************************************************************\r
416 */\r
417 void USART1_Configuration(void)\r
418 {\r
419 \r
420 USART_InitTypeDef USART_InitStructure;\r
421 USART_ClockInitTypeDef  USART_ClockInitStructure;\r
422 \r
423 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 |RCC_APB2Periph_USART1, ENABLE  );\r
424 \r
425 USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;                     // Ê±Öӵ͵çƽ»î¶¯\r
426 USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;                           // Ê±Öӵ͵çƽ\r
427 USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;                         // Ê±ÖÓµÚ¶þ¸ö±ßÑؽøÐÐÊý¾Ý²¶»ñ\r
428 USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;         // ×îºóһλÊý¾ÝµÄʱÖÓÂö³å²»´ÓSCLKÊä³ö\r
429 /* Configure the USART1 synchronous paramters */\r
430 USART_ClockInit(USART1, &USART_ClockInitStructure);                                     // Ê±ÖÓ²ÎÊý³õʼ»¯ÉèÖÃ\r
431                                                                                                                                          \r
432 USART_InitStructure.USART_BaudRate = 115200;                                              // ²¨ÌØÂÊΪ£º115200\r
433 USART_InitStructure.USART_WordLength = USART_WordLength_8b;                       // 8λÊý¾Ý\r
434 USART_InitStructure.USART_StopBits = USART_StopBits_1;                            // ÔÚÖ¡½áβ´«Êä1¸öֹͣλ\r
435 USART_InitStructure.USART_Parity = USART_Parity_No ;                              // ÆæżʧÄÜ\r
436 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ó²¼þÁ÷¿ØÖÆʧÄÜ\r
437
438 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;           // ·¢ËÍʹÄÜ+½ÓÊÕʹÄÜ\r
439 /* Configure USART1 basic and asynchronous paramters */\r
440 USART_Init(USART1, &USART_InitStructure);\r
441     \r
442   /* Enable USART1 */\r
443 USART_ClearFlag(USART1, USART_IT_RXNE);                         //ÇåÖжϣ¬ÒÔÃâÒ»ÆôÓÃÖжϺóÁ¢¼´²úÉúÖжÏ\r
444 USART_ITConfig(USART1,USART_IT_RXNE, ENABLE);           //ʹÄÜUSART1ÖжÏÔ´\r
445 USART_Cmd(USART1, ENABLE);                                                      //USART1×Ü¿ª¹Ø£º¿ªÆô \r
446 }\r
447 \r
448 \r
449 /*\r
450 ********************************************************************************\r
451 ** º¯ÊýÃû³Æ £º NVIC_Configuration(void)\r
452 ** º¯Êý¹¦ÄÜ £º Öжϳõʼ»¯\r
453 ** Êä    Èë     £º ÎÞ\r
454 ** Êä    ³ö     £º ÎÞ\r
455 ** ·µ    »Ø     £º ÎÞ\r
456 ********************************************************************************\r
457 */\r
458 void NVIC_Configuration(void)\r
459\r
460   NVIC_InitTypeDef NVIC_InitStructure;  \r
461   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); \r
462  \r
463   NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQChannel;\r
464   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;\r
465   NVIC_Init(&NVIC_InitStructure);\r
466 \r
467 }\r
468 \r
469  /*\r
470 ********************************************************************************\r
471 ** º¯ÊýÃû³Æ £º WWDG_Configuration(void)\r
472 ** º¯Êý¹¦ÄÜ £º ¿´ÃŹ·³õʼ»¯\r
473 ** Êä    Èë     £º ÎÞ\r
474 ** Êä    ³ö     £º ÎÞ\r
475 ** ·µ    »Ø     £º ÎÞ\r
476 ********************************************************************************\r
477 */\r
478 void WWDG_Configuration(void)\r
479 {\r
480   RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);  \r
481   WWDG_SetPrescaler(WWDG_Prescaler_8);                //  WWDG clock counter = (PCLK1/4096)/8 = 244 Hz (~4 ms)  \r
482   WWDG_SetWindowValue(0x41);                             // Set Window value to 0x41\r
483   WWDG_Enable(0x50);                   // Enable WWDG and set counter value to 0x7F, WWDG timeout = ~4 ms * 64 = 262 ms \r
484   WWDG_ClearFlag();                            // Clear EWI flag\r
485   WWDG_EnableIT();                             // Enable EW interrupt\r
486 }\r
487 \r
488 /*\r
489 ********************************************************************************\r
490 ** º¯ÊýÃû³Æ £º Delay(vu32 nCount)\r
491 ** º¯Êý¹¦ÄÜ £º ÑÓʱº¯Êý\r
492 ** Êä    Èë     £º ÎÞ\r
493 ** Êä    ³ö     £º ÎÞ\r
494 ** ·µ    »Ø     £º ÎÞ\r
495 ********************************************************************************\r
496 */\r
497  void Delay(vu32 nCount)\r
498 {\r
499   for(; nCount != 0; nCount--);\r
500 }\r
501 \r
502 /*\r
503 ********************************************************************************\r
504 ** º¯ÊýÃû³Æ £º void Delayms(vu32 m)\r
505 ** º¯Êý¹¦ÄÜ £º ³¤ÑÓʱº¯Êý        m=1,ÑÓʱ1ms\r
506 ** Êä    Èë     £º ÎÞ\r
507 ** Êä    ³ö     £º ÎÞ\r
508 ** ·µ    »Ø     £º ÎÞ\r
509 ********************************************************************************\r
510 */\r
511  void Delayms(vu32 m)\r
512 {\r
513   u32 i;\r
514   \r
515   for(; m != 0; m--)    \r
516        for (i=0; i<50000; i++);\r
517 }\r
518 \r
519 /*\r
520 ********************************************************************************\r
521 ** º¯ÊýÃû³Æ £º WWDG_IRQHandler(void)\r
522 ** º¯Êý¹¦ÄÜ £º ´°¿ÚÌáÇ°»½ÐÑÖжÏ\r
523 ** Êä    Èë     £º ÎÞ\r
524 ** Êä    ³ö     £º ÎÞ\r
525 ** ·µ    »Ø     £º ÎÞ\r
526 ********************************************************************************\r
527 */ \r
528 \r
529 void WWDG_IRQHandler(void)\r
530 {\r
531   /* Update WWDG counter */\r
532   WWDG_SetCounter(0x50);\r
533         \r
534   /* Clear EWI flag */\r
535   WWDG_ClearFlag(); \r
536 }\r
537  //************************************************\r
538 void  USART1_SendData(uchar SendData)\r
539 {\r
540 USART_SendData(USART1, SendData);\r
541 Delayms(1);\r
542 }\r
543 //³õʼ»¯MPU3050£¬¸ù¾ÝÐèÒªÇë²Î¿¼pdf½øÐÐÐÞ¸Ä************************\r
544 void Init_MPU3050(void)\r
545 {\r
546    Single_Write(MPU3050_Addr,PWR_M, 0x80);   //\r
547    Single_Write(MPU3050_Addr,SMPL, 0x07);    //\r
548    Single_Write(MPU3050_Addr,DLPF, 0x1E);    //¡À2000¡ã\r
549    Single_Write(MPU3050_Addr,INT_C, 0x00 );  //\r
550    Single_Write(MPU3050_Addr,PWR_M, 0x00);   //\r
551 }\r
552         \r
553 //******¶ÁÈ¡MPU3050Êý¾Ý****************************************\r
554 void READ_MPU3050(void)\r
555 {\r
556    BUF[0]=Single_Read(MPU3050_Addr,GX_L); \r
557    BUF[1]=Single_Read(MPU3050_Addr,GX_H);\r
558    T_X= (BUF[1]<<8)|BUF[0];\r
559    T_X/=16.4;                                              //¶ÁÈ¡¼ÆËãXÖáÊý¾Ý\r
560 \r
561    BUF[2]=Single_Read(MPU3050_Addr,GY_L);\r
562    BUF[3]=Single_Read(MPU3050_Addr,GY_H);\r
563    T_Y= (BUF[3]<<8)|BUF[2];\r
564    T_Y/=16.4;                                              //¶ÁÈ¡¼ÆËãYÖáÊý¾Ý\r
565    BUF[4]=Single_Read(MPU3050_Addr,GZ_L);\r
566    BUF[5]=Single_Read(MPU3050_Addr,GZ_H);\r
567    T_Z= (BUF[5]<<8)|BUF[4];\r
568    T_Z/=16.4;                                          //¶ÁÈ¡¼ÆËãZÖáÊý¾Ý\r
569 \r
570    BUF[6]=Single_Read(MPU3050_Addr,TMP_L); \r
571    BUF[7]=Single_Read(MPU3050_Addr,TMP_H); \r
572    T_T=(BUF[7]<<8)|BUF[6];\r
573    T_T = 35+ ((double) (T_T + 13200)) / 280;// ¶ÁÈ¡¼ÆËã³öζÈ\r
574 }\r
575  //********´®¿Ú·¢ËÍÊý¾Ý***************************************\r
576  void Send_data(uchar axis)\r
577  {uchar i;\r
578   USART1_SendData(axis);\r
579   USART1_SendData(':');\r
580   for(i=0;i<4;i++)USART1_SendData(TX_DATA[i]);\r
581   USART1_SendData(' ');\r
582   USART1_SendData(' ');\r
583  }\r
584 \r
585   /*\r
586 ********************************************************************************\r
587 ** º¯ÊýÃû³Æ £º main(void)\r
588 ** º¯Êý¹¦ÄÜ £º Ö÷º¯Êý\r
589 ** Êä    Èë     £º ÎÞ\r
590 ** Êä    ³ö     £º ÎÞ\r
591 ** ·µ    »Ø     £º ÎÞ\r
592 ********************************************************************************\r
593 */\r
594 int main(void)\r
595\r
596   RCC_Configuration();           //ÅäÖÃRCC\r
597   GPIO_Configuration();          //ÅäÖÃGPIO\r
598   USART1_Configuration();        //ÅäÖô®¿Ú1\r
599   I2C_GPIO_Config();             //ÅäÖÃIICʹÓö˿Ú\r
600   Delayms(10);                           //ÑÓʱ\r
601   Init_MPU3050();                    //³õʼ»¯MPU3050\r
602   while(1)\r
603  {\r
604         READ_MPU3050();          //¶ÁÈ¡MPU3050Êý¾Ý\r
605     DATA_printf(TX_DATA,T_X);//ת»»XÖáÊý¾Ýµ½Êý×é\r
606         Send_data('X');                  //·¢ËÍXÖáÊý\r
607         DATA_printf(TX_DATA,T_Y);//ת»»YÖáÊý¾Ýµ½Êý×é\r
608         Send_data('Y');                  //·¢ËÍYÖáÊý\r
609         DATA_printf(TX_DATA,T_Z);//ת»»ZÖáÊý¾Ýµ½Êý×é\r
610         Send_data('Z');                  //·¢ËÍZÖáÊý\r
611         DATA_printf(TX_DATA,T_T);//ת»»Î¶ÈÊý¾Ýµ½Êý×é\r
612         Send_data('T');                  //·¢ËÍζÈÊý¾Ý\r
613         USART1_SendData(0X0D);   //»»ÐÐ\r
614         USART1_SendData(0X0A);   //»Ø³µ\r
615         Delayms(5);                              //ÑÓʱ\r
616   }\r
617 }\r
618 \r
619 /*************½áÊø***************/\r