2.52 GY-25 倾斜角度模块(来自#ifndef 的贡献)
2.52.1 模块来源
采购链接: https://detail.tmall.com/item.htm?abbucket=0&id=42403872419&ns=1&spm=a21n57.1.0.0.3dfb523c3A9kG6
资料下载: https://pan.baidu.com/s/1qAZG5Wd7KFwt64MYGbn9Uw 提取码: fan7
实物展示图
2.52.2 规格参数
工作电压:3~5V
工作电流:15mA
通信方式:串口(3.3V)
测量范围:±180°
测量精度: 1°(0.01° 分辨率)
**响应频率: 100Hz(115200bps) **
2.52.3 模块原理
本质为 MCU+MPU6050 二次封装的模块,MCU 为 STM32F030F4.支持串口与 IIC 通信
串口默认 115200bps8N1,可修改为 9600bps(通过物理焊点)
支持 IIC 接口,屏蔽 MCU,直通 MPU6050 接口.
注意:
- 上电后需保持 3 秒以上静止,模块自校准
- 模块存在航向角偏移(长时间运行)
- 欧拉角万向锁问题,横滚/俯仰 90 度时会有互相影响
2.52.4 移植工程
模块使用串口进行通信,通信速率 115200(8N1),模块内置 LDO,因此可在 3~5V 供电情况下通过 3.3V 电平通信.由于 IIC 接口方式为直连 MPU6050 芯片,相关案例请直接参考第 4 章【立创·梁山派】模块移植手册 内 MPU6050 章节.
2.54.5 引脚选择
Module | 立创·梁山派 | 接线图 |
---|
2.54.6 移植步骤
创建 bsp_gy25.c
文档内容如下:
c
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: LC
* 修改日期: 2023年06月12日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "bsp_gy25.h"
#include "bsp_usart.h" // communication interface & log
/* Private types -------------------------------------------------------------*/
/* Data struct */
typedef struct
{
uint8_t head; ///< 0xAA fixed
uint8_t yaw_h; ///< heading angle. high byte
uint8_t yaw_l; ///< heading angle. low byte
uint8_t pitch_h; ///< pitch angle. high byte
uint8_t pitch_l; ///< pitch angle. low byte
uint8_t roll_h; ///< roll angle. high byte
uint8_t roll_l; ///< roll angle. low byte
uint8_t tail; ///< 0x55 fixed
} Gy25Data_t;
/* Private macros ------------------------------------------------------------*/
/* User porting interfaces */
#define PORTING_API_INIT(n) bsp_uart_user_init((n))
#define PORTING_API_SEND(dat,len) bsp_uart_user_send((dat),(len))
#define PORTING_API_RECV(dat,len) bsp_uart_user_recv((dat),(len))
#define PORTING_BUFFER_SIZE 32u
/* Get int16_t bigend */
#define GET_INT16_BE(n,b,i) \
{ \
(n) = (((int16_t) (b)[(i)] << 8 ) | \
((int16_t) (b)[(i) + 1] )); \
}
/* Private variables ---------------------------------------------------------*/
struct
{
bool initialize;
} Gy25Info;
/* Private functions ---------------------------------------------------------*/
/* External variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
/// @brief Initialize module
/// @return @see bsp_uart_user_init
__API__ int bsp_gy25_init( void )
{
if( Gy25Info.initialize != false )
{
return 0;
}
/* Initialize uart port */
if( PORTING_API_INIT( 115200 ) != 0 )
{
return -1;
}
Gy25Info.initialize = true;
return 0;
}
/// @brief Get data from module
/// @param _Data input data
/// @param _Length length of data
/// @param[out] _Yaw heading angle
/// @param[out] _Pitch pitch angle
/// @param[out] _Roll roll angle
/// @return 0 Success <0 Failed
__API__ int bsp_gy25_data( const uint8_t* _Data, uint8_t _Length,
int16_t* _Yaw, int16_t* _Pitch, int16_t* _Roll )
{
assert( _Data );
/* Check data packet length */
if( _Length < 8 )
{
return -101; //data too short
}
/* Check data head */
if( _Data[0] != 0xAA || _Data[7] != 0x55 )
{
return -102; // head not match
}
/* Combined data */
if( _Yaw )
{
GET_INT16_BE( *_Yaw, _Data, 1 );
}
if( _Pitch )
{
GET_INT16_BE( *_Pitch, _Data, 3 );
}
if( _Roll )
{
GET_INT16_BE( *_Roll, _Data, 5 );
}
return 0;
}
/// @brief Test fucntion
/// @return 0 Success <0 Failed
__API__ int bsp_gy25_coroutine( void )
{
uint8_t _buffer[PORTING_BUFFER_SIZE];
uint32_t _length;
int _res;
int16_t _yaw = 0;
int16_t _pitch = 0;
int16_t _roll = 0;
/* Data processing after initialization */
if( Gy25Info.initialize != true )
{
return 0;
}
/* receive data */
_length = PORTING_API_RECV( _buffer, PORTING_BUFFER_SIZE );
if( _length < 8 )
{
return 0; // Buffer is empty
}
LOG_HEX( "Data:", 16, ( uint8_t* )_buffer, _length );
_res = bsp_gy25_data( ( const uint8_t* )_buffer, _length, &_yaw, &_pitch, &_roll );
if( _res < 0 )
{
LOG_RAW( "GY25-Error %d\r\n", _res );
}
LOG_RAW( "GY25 Yaw:%.2f Pitch:%.2f Roll:%.2f\r\n",
_yaw / 100.0, _pitch / 100.0, _roll / 100.0 );
return _res;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
创建 bsp_gy25.h
文档内容如下:
c
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: LC
* 修改日期: 2023年06月12日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_GY25_H__
#define __BSP_GY25_H__
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Exported constants --------------------------------------------------------*/
/* Exported macros -----------------------------------------------------------*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
/// @brief Initialize module
/// @return @see bsp_uart_user_init
__API__ int bsp_gy25_init( void );
/// @brief Get data from module
/// @param _Data input data
/// @param _Length length of data
/// @param[out] _Yaw heading angle
/// @param[out] _Pitch pitch angle
/// @param[out] _Roll roll angle
/// @return 0 Success <0 Failed
__API__ int bsp_gy25_data( const uint8_t* _Data, uint8_t _Length,
int16_t* _Yaw, int16_t* _Pitch, int16_t* _Roll );
/// @brief Test fucntion
/// @return 0 Success <0 Failed
__API__ int bsp_gy25_coroutine( void );
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __BSP_GY25_H__ */
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
相关串口驱动等底层驱动部分参见 bsp_usart.c
文档内容:
c
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: LC
* 修改日期: 2023年06月12日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#include "bsp_usart.h"
#include <string.h> //memcpy
/* Porting config */
// #define UARTx_BOUND 9600
#define UARTx_NAME USART1
#define UARTx_RCC RCU_USART1
#define UARTx_GPIO_RCC (RCU_GPIOA)
#define UARTx_PIN_TX GPIO_PIN_2
#define UARTx_PORT_TX GPIOA
#define UARTx_AF_TX GPIO_AF_7
#define UARTx_PIN_RX GPIO_PIN_3
#define UARTx_PORT_RX GPIOA
#define UARTx_AF_RX GPIO_AF_7
/* interrupt */
#define UARTx_IRQ_CHANNEL USART1_IRQn
#define UARTx_IRQ_HANDLER USART1_IRQHandler
#define UARTx_IRQ_PRIORITY 5
/* Revice data buffer size */
#define UARTx_RX_BUFFER_SIZE 64 // at least 9Bytes
#define MIN(n,m) (((n) < (m)) ? (n) : (m))
struct
{
bool initialize;
bool rx_flag;
uint8_t length;
uint8_t buffer[UARTx_RX_BUFFER_SIZE];
} bsp_uart_user;
__API__ int bsp_uart_user_init( uint32_t _BandRate )
{
if( bsp_uart_user.initialize != false )
{
return 0;
}
/* Enable the UART Clock */
rcu_periph_clock_enable( UARTx_GPIO_RCC );
rcu_periph_clock_enable( UARTx_RCC );
/* Configure the UART TX pin */
gpio_af_set( UARTx_PORT_TX, UARTx_AF_TX, UARTx_PIN_TX );
gpio_mode_set( UARTx_PORT_TX, GPIO_MODE_AF, GPIO_PUPD_PULLUP, UARTx_PIN_TX );
gpio_output_options_set( UARTx_PORT_TX, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, UARTx_PIN_TX );
/* Configure the UART RX pin */
gpio_af_set( UARTx_PORT_RX, UARTx_AF_RX, UARTx_PIN_RX );
gpio_mode_set( UARTx_PORT_RX, GPIO_MODE_AF, GPIO_PUPD_PULLUP, UARTx_PIN_RX );
gpio_output_options_set( UARTx_PORT_RX, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, UARTx_PIN_RX );
/* Configure UART param: 8N1 */
usart_deinit( UARTx_NAME );
usart_baudrate_set( UARTx_NAME, _BandRate );
usart_parity_config( UARTx_NAME, USART_PM_NONE );
usart_word_length_set( UARTx_NAME, USART_WL_8BIT );
usart_stop_bit_set( UARTx_NAME, USART_STB_1BIT );
/* Enabel transmit mode */
usart_transmit_config( UARTx_NAME, USART_TRANSMIT_ENABLE );
usart_receive_config( UARTx_NAME, USART_RECEIVE_ENABLE );
/* Configure interrupt */
nvic_irq_enable( UARTx_IRQ_CHANNEL, UARTx_IRQ_PRIORITY, 0 );
/* Interrupt mode */
/* receive data not empty interrupt */
usart_interrupt_enable( UARTx_NAME, USART_INT_RBNE );
usart_interrupt_enable( UARTx_NAME, USART_INT_IDLE );
usart_flag_clear( UARTx_NAME, USART_FLAG_TC );
/* Enable periph */
usart_enable( UARTx_NAME );
bsp_uart_user.initialize = true;
return 0;
}
__API__ uint32_t bsp_uart_user_send( uint8_t* _Data, uint32_t _Length )
{
#if 0
if( USART_CTL0( UARTx_NAME ) & ( USART_CTL0_UEN ) != ( USART_CTL0_UEN ) )
{
return 0; // Device is disable
}
#else
if( bsp_uart_user.initialize == false )
{
return 0;
}
#endif
for( uint32_t i = 0; i < _Length; i++ )
{
usart_data_transmit( UARTx_NAME, *( ( char* )_Data + i ) );
while( usart_flag_get( UARTx_NAME, USART_FLAG_TC ) == RESET );
}
return _Length;
}
__API__ uint32_t bsp_uart_user_recv( uint8_t* _Data, uint32_t _Length )
{
assert( _Data );
uint32_t _len = 0;
if( bsp_uart_user.initialize == false )
{
return 0;
}
_len = MIN( _Length, bsp_uart_user.length );
if( ( bsp_uart_user.rx_flag != false ) && ( _len > 0 ) )
{
memcpy( _Data, bsp_uart_user.buffer, _len );
/* Clear receive status */
bsp_uart_user.length = 0x00;
bsp_uart_user.rx_flag = false;
}
return _len;
}
__IRQ__ void UARTx_IRQ_HANDLER( void )
{
/* Data processing after initialization */
if( bsp_uart_user.initialize != true )
{
return;
}
/* Receive Data not empty */
if( usart_interrupt_flag_get( UARTx_NAME, USART_INT_FLAG_RBNE ) != RESET )
{
/* Read one byte from the receive data register */
uint8_t _recv = ( usart_data_receive( UARTx_NAME ) & 0xFF );
/* Push one byte to receive fifo */
if( bsp_uart_user.rx_flag != false )
{
return; //Buffer data not processed, skipping reception
}
if( bsp_uart_user.length < UARTx_RX_BUFFER_SIZE )
{
// Prevent overflow
bsp_uart_user.buffer[bsp_uart_user.length++] = _recv;
}
}
/* Bus idle */
else if( usart_interrupt_flag_get( UARTx_NAME, USART_INT_FLAG_IDLE ) != RESET )
{
/* Clear IDLE */
( void )USART_STAT0( UARTx_NAME );
( void )USART_DATA( UARTx_NAME );
if( bsp_uart_user.length )
{
bsp_uart_user.rx_flag = true;
}
}
/* Overrun error : skip */
}
/*---- Log output simple apis ----------------------------------------------- */
__API__ void _LOG_HEX( char* _Name, uint8_t _Width, uint8_t* _Data, uint8_t _Length )
{
size_t _len;
for( size_t i = 0; i < _Length; i += _Width )
{
/* Name */
printf( "%-*.*s ", 16, 16, _Name );
/* Timestamp */
/* Fill data */
_len = 0x00;
for( size_t j = 0; j < _Width; j++ )
{
if( ( i + j ) < _Length )
{
printf( "%02X", _Data[i + j] );
}
if( ( j + 1 ) % 4 == 0 )
{
printf( " " );
}
}
printf( "\r\n" );
}
}
/*---- Official printf interface(KeilMDK microLib) -------------------------- */
/************************************************
函数名称 : usart_gpio_config
功 能 : 串口配置GPIO
参 数 : band_rate:波特率
返 回 值 : 无
作 者 : LC
*************************************************/
void usart_gpio_config( uint32_t band_rate )
{
/* 开启时钟 */
rcu_periph_clock_enable( BSP_USART_TX_RCU ); // 开启串口时钟
rcu_periph_clock_enable( BSP_USART_RX_RCU ); // 开启端口时钟
rcu_periph_clock_enable( BSP_USART_RCU ); // 开启端口时钟
/* 配置GPIO复用功能 */
gpio_af_set( BSP_USART_TX_PORT, BSP_USART_AF, BSP_USART_TX_PIN );
gpio_af_set( BSP_USART_RX_PORT, BSP_USART_AF, BSP_USART_RX_PIN );
/* 配置GPIO的模式 */
/* 配置TX为复用模式 上拉模式 */
gpio_mode_set( BSP_USART_TX_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, BSP_USART_TX_PIN );
/* 配置RX为复用模式 上拉模式 */
gpio_mode_set( BSP_USART_RX_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, BSP_USART_RX_PIN );
/* 配置TX为推挽输出 50MHZ */
gpio_output_options_set( BSP_USART_TX_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, BSP_USART_TX_PIN );
/* 配置RX为推挽输出 50MHZ */
gpio_output_options_set( BSP_USART_RX_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, BSP_USART_RX_PIN );
/* 配置串口的参数 */
usart_deinit( BSP_USART ); // 复位串口
usart_baudrate_set( BSP_USART, band_rate ); // 设置波特率
usart_parity_config( BSP_USART, USART_PM_NONE ); // 没有校验位
usart_word_length_set( BSP_USART, USART_WL_8BIT ); // 8位数据位
usart_stop_bit_set( BSP_USART, USART_STB_1BIT ); // 1位停止位
/* 使能串口 */
usart_enable( BSP_USART ); // 使能串口
usart_transmit_config( BSP_USART, USART_TRANSMIT_ENABLE ); // 使能串口发送
}
/************************************************
函数名称 : usart_send_data
功 能 : 串口重发送一个字节
参 数 : ucch:要发送的字节
返 回 值 :
作 者 : LC
*************************************************/
void usart_send_data( uint8_t ucch )
{
usart_data_transmit( BSP_USART, ( uint8_t )ucch ); // 发送数据
while( RESET == usart_flag_get( BSP_USART, USART_FLAG_TBE ) ); // 等待发送数据缓冲区标志置位
}
/************************************************
函数名称 : usart_send_String
功 能 : 串口发送字符串
参 数 : ucstr:要发送的字符串
返 回 值 :
作 者 : LC
*************************************************/
void usart_send_string( uint8_t* ucstr )
{
while( ucstr && *ucstr ) // 地址为空或者值为空跳出
{
usart_send_data( *ucstr++ ); // 发送单个字符
}
}
/************************************************
函数名称 : fputc
功 能 : 串口重定向函数
参 数 :
返 回 值 :
作 者 : LC
*************************************************/
int fputc( int ch, FILE* f )
{
usart_send_data( ch );
// 等待发送数据缓冲区标志置位
return ch;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
2.54.7 移植验证
这里仅按照上面淘宝店铺提供资料包手册中提及的格式进行解析,实际并未使用梁山派 TX 引脚.查看店家的例程,似乎还有其他指令,只是程序比较乱,店家也无法提供更多信息.
工程主函数内修改如下:
c
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: LC
* 修改日期: 2023年06月12日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#include "gd32f4xx.h"
#include "systick.h"
#include "bsp_usart.h"
/* Porting files */
#include "gy25/bsp_gy25.h"
int main( void )
{
/* Bsp configuration */
nvic_priority_group_set( NVIC_PRIGROUP_PRE2_SUB2 );
systick_config();
usart_gpio_config( 115200U );
/* User configuration */
int _res;
if( bsp_gy25_init() != 0 )
{
LOG_RAW( "Error component initialization failed\r\n" );
delay_1ms( 5000 );
NVIC_SystemReset(); //Call software reset system
}
LOG_RAW( "Component demo start\r\n" );
while( 1 )
{
_res = bsp_gy25_coroutine(); // test fucntions
if( _res < 0 )
{
LOG_RAW( "Sensor error code %d\r\n", _res );
}
delay_1ms( 500 );
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
案例现象:
上电后,梁山派接收 GY25 输出数据并以 2Hz 频率打印日志.
移植成功示例文件: