mirror of
https://gitee.com/seekfree/TC264_Library.git
synced 2026-06-04 03:32:56 +00:00
V1.2.6
修改蓝牙驱动底层,简化了使用方式
修改总钻风驱动底层,增加对V2.1版本总钻风的PCLK参数设置
增加双频GPS定位模块的底层驱动
This commit is contained in:
@@ -2350,5 +2350,7 @@
|
||||
</project-mappings>
|
||||
|
||||
</storageModule>
|
||||
|
||||
<storageModule moduleId="refreshScope"/>
|
||||
|
||||
</cproject>
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
V1.2.6
|
||||
<20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ㣬<D7B2><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>÷<EFBFBD>ʽ
|
||||
<20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ㣬<D7B2><E3A3AC><EFBFBD>Ӷ<EFBFBD>V2.1<EFBFBD>汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PCLK<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD>˫ƵGPS<50><53>λģ<CEBB><C4A3><EFBFBD>ĵײ<C4B5><D7B2><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
V1.2.5
|
||||
<EFBFBD>Ż<EFBFBD>Ӳ<EFBFBD><EFBFBD>SPI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<EFBFBD><EFBFBD>Ļˢ<EFBFBD><EFBFBD><EFBFBD>ٶȣ<EFBFBD>IPS1.14<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>188*120<32>ɴ<EFBFBD>31֡<31><D6A1><EFBFBD><EFBFBD>ʾ160*120<32>ɴ<EFBFBD>37֡<37><D6A1>TFT1.8<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>160*120<32>ɴ<EFBFBD>37֡<37><D6A1>
|
||||
<EFBFBD>Ż<EFBFBD>Ӳ<EFBFBD><EFBFBD>SPI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<EFBFBD><EFBFBD>Ļˢ<EFBFBD><EFBFBD><EFBFBD>ٶȣ<EFBFBD>IPS1.14<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>188*120<32>ɴ<EFBFBD>31֡<31><D6A1><EFBFBD><EFBFBD>ʾ160*120<32>ɴ<EFBFBD>37֡<37><D6A1>TFT1.8<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>160*120<32>ɴ<EFBFBD>37֡<37><D6A1>
|
||||
|
||||
V1.2.4
|
||||
<09><EFBFBD>systick_delay_ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD>ϳ<EFBFBD><CFB3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1>䲻<EFBFBD><E4B2BB>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
@@ -28,6 +28,7 @@ CAMERA_TYPE_enum camera_type; //
|
||||
uint8 *camera_buffer_addr; //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
|
||||
WIRELESS_TYPE_enum wireless_type;//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPS_TYPE_enum gps_type; //gps<70><73><EFBFBD><EFBFBD>
|
||||
|
||||
IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0;//<2F>¼<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
@@ -119,6 +119,11 @@ typedef enum //
|
||||
WIRELESS_CH9141, //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
|
||||
}WIRELESS_TYPE_enum;
|
||||
|
||||
typedef enum //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
||||
{
|
||||
GPS_TAU1201 = 1, //<2F><><EFBFBD><EFBFBD>GPSģ<53><C4A3>
|
||||
}GPS_TYPE_enum;
|
||||
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
#include "IfxCpu.h"
|
||||
@@ -127,7 +132,7 @@ extern CAMERA_TYPE_enum camera_type; //
|
||||
extern uint8 *camera_buffer_addr; //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
|
||||
extern WIRELESS_TYPE_enum wireless_type;
|
||||
|
||||
extern GPS_TYPE_enum gps_type;
|
||||
extern IfxCpu_syncEvent g_cpuSyncEvent;
|
||||
|
||||
void get_clk(void);
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
#include "SEEKFREE_RDA5807.h"
|
||||
#include "SEEKFREE_7725_UART.h"
|
||||
#include "SEEKFREE_BLUETOOTH_CH9141.h"
|
||||
#include "SEEKFREE_GPS_TAU1201.h"
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -31,479 +31,248 @@
|
||||
#include "zf_assert.h"
|
||||
#include "SEEKFREE_BLUETOOTH_CH9141.h"
|
||||
|
||||
uint8 uart_flag;
|
||||
uint8 uart_data;
|
||||
static fifo_struct bluetooth_ch9141_fifo;
|
||||
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
vuint8 at_mode = 0; //0:<3A><><EFBFBD><EFBFBD><EFBFBD><CDB8>ģʽ 1:ATģʽ 2:ģ<>鸴λ<E9B8B4><CEBB>
|
||||
vuint8 at_mode_num; //atģʽʱ<CABD><CAB1><EFBFBD><EFBFBD>ָʾ<D6B8><CABE><EFBFBD>ݽ<EFBFBD><DDBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
vuint8 at_mode_data[30]; //<2F><><EFBFBD><EFBFBD>at<61><74><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>
|
||||
vuint8 at_mode_cmd_flag; //OKӦ<4B><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճɹ<D5B3><C9B9>ı<EFBFBD>־λ
|
||||
|
||||
uint8 mac_address[17]; //<2F><><EFBFBD><EFBFBD>mac<61><63>ַ
|
||||
|
||||
|
||||
uint8 bluetooth_ch9141_rx_buffer;
|
||||
|
||||
|
||||
void bluetooth_ch9141_check_response(void);
|
||||
static uint8 bluetooth_ch9141_data;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param NULL
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>ISR<53>ļ<EFBFBD> <20><><EFBFBD><EFBFBD>8<EFBFBD>жϳ<D0B6><CFB3><EFBFBD><F2B1BBB5><EFBFBD>
|
||||
// @brief FIFO <20><>ʼ<EFBFBD><EFBFBD> <20><><EFBFBD>ض<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// @param *buffer_addr Ҫ<><D2AA><EFBFBD>صĻ<D8B5><C4BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param size <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
// @return fifo_state_enum <20><><EFBFBD><EFBFBD>״̬
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_uart_callback()
|
||||
fifo_state_enum fifo_init (fifo_struct *fifo, uint8 *buffer_addr, uint32 size)
|
||||
{
|
||||
while(uart_query(BLUETOOTH_CH9141_UART, &bluetooth_ch9141_rx_buffer))
|
||||
if(buffer_addr == NULL)
|
||||
return FIFO_BUFFER_NULL;
|
||||
fifo->buffer = buffer_addr;
|
||||
fifo->head = 0;
|
||||
fifo->end = 0;
|
||||
fifo->size = size;
|
||||
fifo->max = size;
|
||||
return FIFO_SUCCESS;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief FIFO ͷָ<CDB7><D6B8>λ<EFBFBD><CEBB>
|
||||
// @param *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// @param offset ƫ<><C6AB><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void fifo_head_offset (fifo_struct *fifo, uint32 offset)
|
||||
{
|
||||
fifo->head += offset;
|
||||
|
||||
while(fifo->max <= fifo->head) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С ֱ<><D6B1>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3BBBAB3><EFBFBD><EFBFBD><EFBFBD>С
|
||||
{
|
||||
if(1 == at_mode)
|
||||
fifo->head -= fifo->max;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief FIFO βָ<CEB2><D6B8>λ<EFBFBD><CEBB>
|
||||
// @param *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// @param offset ƫ<><C6AB><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void fifo_end_offset (fifo_struct *fifo, uint32 offset)
|
||||
{
|
||||
fifo->end += offset;
|
||||
|
||||
while(fifo->max <= fifo->end) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С ֱ<><D6B1>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3BBBAB3><EFBFBD><EFBFBD><EFBFBD>С
|
||||
{
|
||||
fifo->end -= fifo->max;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief FIFO <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// @return void
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void fifo_clear (fifo_struct *fifo)
|
||||
{
|
||||
fifo->head = 0;
|
||||
fifo->end = 0;
|
||||
fifo->size = fifo->max;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief FIFO <20><>ѯ<EFBFBD><D1AF>ǰ<EFBFBD><C7B0><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
||||
// @param *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// @return void
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 fifo_used (fifo_struct *fifo)
|
||||
{
|
||||
return (fifo->max - fifo->size);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><> FIFO <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// @param *dat <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// @param length <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// @return fifo_state_enum <20><><EFBFBD><EFBFBD>״̬
|
||||
// Sample usage: if(fifo_write_buffer(&fifo,data,32)!=FIFO_SUCCESS) while(1);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
fifo_state_enum fifo_write_buffer (fifo_struct *fifo, uint8 *dat, uint32 length)
|
||||
{
|
||||
uint32 temp_length;
|
||||
|
||||
if(length < fifo->size) // ʣ<><CAA3><EFBFBD>ռ<EFBFBD><D5BC>㹻װ<E3B9BB>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
temp_length = fifo->max - fifo->head; // <20><><EFBFBD><EFBFBD>ͷָ<CDB7><D6B8><EFBFBD><EFBFBD><EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ж<EFBFBD><D0B6>ٿռ<D9BF>
|
||||
|
||||
if(length > temp_length) // <20><><EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶβ<D6B6><CEB2><EFBFBD>
|
||||
{
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ATģʽ <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> <20>˴<EFBFBD>if<69><66><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>Ҫ<EFBFBD>Ķ<EFBFBD>
|
||||
at_mode_data[at_mode_num++] = bluetooth_ch9141_rx_buffer;
|
||||
bluetooth_ch9141_check_response();
|
||||
}
|
||||
else if(2 == at_mode)
|
||||
{
|
||||
//ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD>λ<EFBFBD><CEBB> <20>˴<EFBFBD>if<69><66><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>Ҫ<EFBFBD>Ķ<EFBFBD>
|
||||
at_mode_num++;
|
||||
memcpy(&fifo->buffer[fifo->head], dat, temp_length); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fifo_head_offset(fifo, temp_length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
dat += temp_length; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
memcpy(&fifo->buffer[fifo->head], dat, length - temp_length); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fifo_head_offset(fifo, length - temp_length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
|
||||
}
|
||||
else
|
||||
{
|
||||
//<><CDB8>ģʽ <20>û<EFBFBD><C3BB>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB9><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽں<D6BD><DABA><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>ڴ˴<DAB4><CBB4><EFBFBD>ȡbluetooth_ch9141_rx_buffer<65><72><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ߴ<EFBFBD><DFB4>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ձ<EFBFBD>־
|
||||
uart_flag = 1;
|
||||
uart_data = bluetooth_ch9141_rx_buffer;
|
||||
memcpy(&fifo->buffer[fifo->head], dat, length); // һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>
|
||||
fifo_head_offset(fifo, length); // ͷָ<EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OKӦ<4B><D3A6><EFBFBD>ź<EFBFBD>
|
||||
// @param NULL
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_check_response(void)
|
||||
{
|
||||
if(4 <= at_mode_num)
|
||||
{
|
||||
if(0 == strncmp("OK\r\n", (int8 *)&at_mode_data[at_mode_num-4], 4))
|
||||
{
|
||||
at_mode_cmd_flag = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD>鷢<EFBFBD><E9B7A2>һ<EFBFBD><D2BB>û<EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
|
||||
// @param *str <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_send_at_command(const int8 *str)
|
||||
{
|
||||
at_mode_num = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uart_putstr(BLUETOOTH_CH9141_UART, str);
|
||||
uart_putstr(BLUETOOTH_CH9141_UART, "\r\n");
|
||||
|
||||
//<2F>ȴ<EFBFBD><C8B4>յ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
|
||||
while(!at_mode_cmd_flag);
|
||||
at_mode_cmd_flag = 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD>鷢<EFBFBD><E9B7A2>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
|
||||
// @param *cmd <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param *data <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_send_at_command_parameter(const int8 *cmd, const int8 *data)
|
||||
{
|
||||
at_mode_num = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uart_putstr(BLUETOOTH_CH9141_UART, "AT+");
|
||||
uart_putstr(BLUETOOTH_CH9141_UART, cmd);
|
||||
uart_putstr(BLUETOOTH_CH9141_UART, "=");
|
||||
uart_putstr(BLUETOOTH_CH9141_UART, data);
|
||||
uart_putstr(BLUETOOTH_CH9141_UART, "\r\n");
|
||||
|
||||
//<2F>ȴ<EFBFBD><C8B4>յ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
|
||||
while(!at_mode_cmd_flag);
|
||||
at_mode_cmd_flag = 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ATģʽ
|
||||
// @param NULL
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_enter_at_mode(void)
|
||||
{
|
||||
systick_delay_ms(STM0, 550); //<2F><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>ATģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>Ҫ<EFBFBD><D2AA>֤ģ<D6A4><C4A3><EFBFBD><EFBFBD>550ms<6D><73>û<EFBFBD>н<EFBFBD><D0BD>չ<EFBFBD><D5B9>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD>
|
||||
at_mode = 1; //<2F><><EFBFBD><EFBFBD>ATģʽ
|
||||
bluetooth_ch9141_send_at_command("AT...");
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>˳<EFBFBD>ATģʽ
|
||||
// @param NULL
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_exit_at_mode(void)
|
||||
{
|
||||
bluetooth_ch9141_send_at_command("AT+EXIT");
|
||||
at_mode = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><CDB8>ģʽ
|
||||
systick_delay_ms(STM0, 300); //<2F>ȴ<EFBFBD><C8B4>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>ATģʽ
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD>鸴λ
|
||||
// @param NULL
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_reset(void)
|
||||
{
|
||||
bluetooth_ch9141_send_at_command("AT+RESET");
|
||||
at_mode = 2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
at_mode_num = 0;
|
||||
while(7 > at_mode_num); //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>ɸ<EFBFBD>λ
|
||||
at_mode = 0; //<2F><>λ֮<CEBB><D6AE>ģ<EFBFBD><C4A3><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>ģʽ
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>MAC<41><43>ַ
|
||||
// @param NULL
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note <20><><EFBFBD>ô˺<C3B4><CBBA><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>bluetooth_ch9141_enter_at_mode<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CMD<4D><44><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ATģʽ
|
||||
// <20><>Ҫ<EFBFBD>ر<EFBFBD>ע<EFBFBD><D7A2>bluetooth_ch9141_enter_at_mode<64><65><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>500ms<6D><73><EFBFBD><EFBFBD>ʱ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_get_mac_address(void)
|
||||
{
|
||||
bluetooth_ch9141_send_at_command("AT+MAC?");
|
||||
|
||||
//mac<61><63>ַΪС<CEAA>θ<EFBFBD>ʽ<EFBFBD><CABD>mac_address[0]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mac<61><63>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>λ
|
||||
memcpy(mac_address, (uint8 *)at_mode_data, 17);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><CDB9><EFBFBD>
|
||||
// @param tx_power <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><CDB9>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>鿴CH9141_TX_POWEER_enumö<6D>ٳ<EFBFBD>Ա
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_set_tx_power(CH9141_TX_POWEER_enum tx_power)
|
||||
{
|
||||
int8 tx_power_data;
|
||||
|
||||
tx_power_data = (uint8)tx_power + '0';
|
||||
bluetooth_ch9141_send_at_command_parameter("TPL", &tx_power_data);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
// @param mode ģʽ<C4A3><CABD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>鿴CH9141_MODE_enumö<6D>ٳ<EFBFBD>Ա
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_set_mode(CH9141_MODE_enum mode)
|
||||
{
|
||||
int8 mode_data;
|
||||
|
||||
mode_data = (uint8)mode + '0';
|
||||
bluetooth_ch9141_send_at_command_parameter("BLEMODE", &mode_data);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ȡ״̬
|
||||
// @param mode ģʽ<C4A3><CABD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>鿴CH9141_MODE_enumö<6D>ٳ<EFBFBD>Ա
|
||||
// @return CH9141_STATUS_enum <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>Ϣ
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
CH9141_STATUS_enum bluetooth_ch9141_get_status(CH9141_MODE_enum mode)
|
||||
{
|
||||
CH9141_STATUS_enum ch9141_status;
|
||||
int8 mode_data;
|
||||
|
||||
mode_data = (uint8)mode + '0';
|
||||
bluetooth_ch9141_send_at_command_parameter("BLEMODE", &mode_data);
|
||||
|
||||
bluetooth_ch9141_send_at_command("AT+BLESTA?");
|
||||
|
||||
ch9141_status = (at_mode_data[0] - '0') * 10 + (at_mode_data[1] - '0');
|
||||
if(SLAVE_MODE == mode)
|
||||
{
|
||||
ch9141_status += SLAVE_NO_INIT;
|
||||
}
|
||||
|
||||
return ch9141_status;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
||||
// @param *str <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note <20><><EFBFBD>Ƴ<EFBFBD><C6B3>Ȳ<EFBFBD><C8B2>ܳ<EFBFBD><DCB3><EFBFBD>18<31><38><EFBFBD>ַ<EFBFBD> <20><>ֻ<EFBFBD><D6BB>ΪӢ<CEAA><D3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_set_name(const int8 *str)
|
||||
{
|
||||
bluetooth_ch9141_send_at_command_parameter("NAME", str);
|
||||
bluetooth_ch9141_send_at_command_parameter("PNAME", str);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param enable ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>룬1<EBA3AC><31>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><D3B1>豸
|
||||
// @param *password <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20><><EFBFBD><EFBFBD>Ϊ6<CEAA><36><EFBFBD>ַ<EFBFBD>
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_set_password(uint8 enable, const int8 *password)
|
||||
{
|
||||
if(0 == enable)
|
||||
{
|
||||
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
|
||||
bluetooth_ch9141_send_at_command_parameter("PASEN", "OFF");
|
||||
fifo->size -= length; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD>ȼ<EFBFBD>С
|
||||
}
|
||||
else
|
||||
{
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>벢ʹ<EBB2A2><CAB9>
|
||||
bluetooth_ch9141_send_at_command_parameter("PASEN", "ON");
|
||||
bluetooth_ch9141_send_at_command_parameter("PASS", password);
|
||||
return FIFO_SPACE_NO_ENOUGH;
|
||||
}
|
||||
|
||||
return FIFO_SUCCESS;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>MAC<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param *mac_and_password <20><>Ҫ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD>豸mac<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note bluetooth_ch9141_connect("58:B7:33:E4:C2:84,000000");
|
||||
// 58:B7:33:E4:C2:84Ϊmac<61><63>ַ ,Ϊ<>ָ<EFBFBD><D6B8><EFBFBD> 000000Ϊ<30>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ===================<3D>ر<EFBFBD>ע<EFBFBD><D7A2>==================
|
||||
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ֻ<EFBFBD><D6BB>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mac<61><63>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ʹ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뽫mac<61><63><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD>mac<61><63>ַΪ61:62:63:64:65:66<36><36><EFBFBD><EFBFBD>ʹ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ʱ<EFBFBD><CAB1>Ӧ<EFBFBD><D3A6>д
|
||||
// bluetooth_ch9141_connect("66:65:64:63:62:61,000000");
|
||||
// @brief <20><> FIFO <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param *fifo FIFO <20><><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
// @param *dat Ŀ<>껺<EFBFBD><EABBBA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// @param *length <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᱻ<EFBFBD><EFBFBD>
|
||||
// @param flag <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬ <20><>ѡ<EFBFBD><D1A1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ն<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @return fifo_state_enum <20><><EFBFBD><EFBFBD>״̬
|
||||
// Sample usage: if(fifo_read_buffer(&fifo,data,32,FIFO_READ_ONLY)!=FIFO_SUCCESS) while(1);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_connect(const int8 *mac_and_password)
|
||||
fifo_state_enum fifo_read_buffer (fifo_struct *fifo, uint8 *dat, uint32 *length, fifo_operation_enum flag)
|
||||
{
|
||||
bluetooth_ch9141_send_at_command_parameter("CONN", mac_and_password);
|
||||
}
|
||||
uint8 data_check = 0;
|
||||
uint32 temp_length;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>úú<C3BA><C3BA><EFBFBD>ÿ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8>
|
||||
// @param *mac_and_password <20><>Ҫ<EFBFBD><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>豸mac<61><63>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note bluetooth_ch9141_default_connect("58:B7:33:E4:C2:84,000000");
|
||||
// 58:B7:33:E4:C2:84Ϊmac<61><63>ַ ,Ϊ<>ָ<EFBFBD><D6B8><EFBFBD> 000000Ϊ<30>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ===================<3D>ر<EFBFBD>ע<EFBFBD><D7A2>==================
|
||||
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ֻ<EFBFBD><D6BB>鿴CH9141<34><31>mac<61><63>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>CH9141<34><31><EFBFBD><EFBFBD>Ϊ<EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><>ʹ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뽫mac<61><63><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD>mac<61><63>ַΪ61:62:63:64:65:67<36><37><EFBFBD><EFBFBD>ʹ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ʱ<EFBFBD><CAB1>Ӧ<EFBFBD><D3A6>д
|
||||
// bluetooth_ch9141_default_connect("67:65:64:63:62:61,000000");
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_default_connect(const int8 *mac_and_password)
|
||||
{
|
||||
bluetooth_ch9141_send_at_command_parameter("CONADD", mac_and_password);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ȡrssi(<28>ź<EFBFBD>ǿ<EFBFBD><C7BF>)
|
||||
// @param void
|
||||
// @return int8 <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ǿ<EFBFBD><C7BF>0<EFBFBD><30>-127
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note <20><><EFBFBD>ô˺<C3B4><CBBA><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>bluetooth_ch9141_enter_at_mode<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CMD<4D><44><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ATģʽ
|
||||
// <20><>Ҫ<EFBFBD>ر<EFBFBD>ע<EFBFBD><D7A2>bluetooth_ch9141_enter_at_mode<64><65><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>500ms<6D><73><EFBFBD><EFBFBD>ʱ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
int16 bluetooth_ch9141_get_rssi(void)
|
||||
{
|
||||
uint8 i;
|
||||
size_t length;
|
||||
int16 rssi;
|
||||
bluetooth_ch9141_send_at_command_parameter("RSSI", "ON,0");
|
||||
length = strlen((int8 *)at_mode_data);
|
||||
length -= 12;//<2F><><EFBFBD><EFBFBD>RSSI <20>ж<EFBFBD><D0B6><EFBFBD>λ
|
||||
|
||||
rssi = 0;
|
||||
for(i=0; i<length; i++)
|
||||
if(*length > fifo_used(fifo))
|
||||
{
|
||||
rssi = rssi*10 + (at_mode_data[0] - '0');
|
||||
*length = (fifo->max - fifo->size); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
data_check = 1; // <20><>־<EFBFBD><D6BE><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
|
||||
}
|
||||
|
||||
return -rssi;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD>ͺ<EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
|
||||
// @param len <20><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
|
||||
// @return uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 bluetooth_ch9141_send_buff(uint8 *buff, uint32 len)
|
||||
{
|
||||
while(len)
|
||||
temp_length = fifo->max - fifo->end; // <20><><EFBFBD><EFBFBD>βָ<CEB2><D6B8><EFBFBD><EFBFBD><EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ж<EFBFBD><D0B6>ٿռ<D9BF>
|
||||
if(*length <= temp_length) // <20>㹻һ<E3B9BB><D2BB><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
//<2F><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD> RTSΪ<53>߱<EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//RTSΪ<53>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD>ʽһ<CABD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTSΪ<53><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2>ټ<EFBFBD><D9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵȴ<D6B5>
|
||||
if(gpio_get(BLUETOOTH_CH9141_RTS_PIN))
|
||||
if(NULL != dat) memcpy(dat, &fifo->buffer[fifo->end], *length); // һ<><D2BB><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
else
|
||||
{
|
||||
if(NULL != dat)
|
||||
{
|
||||
break;
|
||||
memcpy(dat, &fifo->buffer[fifo->end], temp_length); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
memcpy(&dat[temp_length], &fifo->buffer[0], *length - temp_length); // <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//RTSΪ<53>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTSΪ<53><CEAA><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>RTSΪ<53><CEAA>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//while(gpio_get(BLUETOOTH_CH9141_RTS_PIN)); //<2F><><EFBFBD><EFBFBD>RTSΪ<53>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uart_putchar(BLUETOOTH_CH9141_UART, *buff);
|
||||
|
||||
buff++;
|
||||
len--;
|
||||
}
|
||||
|
||||
return len;
|
||||
if(flag == FIFO_READ_AND_CLEAN) // <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬
|
||||
{
|
||||
fifo_end_offset(fifo, *length); // <20>ƶ<EFBFBD> FIFO ͷָ<CDB7><D6B8>
|
||||
fifo->size += *length;
|
||||
}
|
||||
|
||||
return (data_check?FIFO_DATA_NO_ENOUGH:FIFO_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// Sample usage:
|
||||
// @note <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>ISR<53>ļ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>жϳ<D0B6><CFB3><EFBFBD><F2B1BBB5><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_uart_callback (void)
|
||||
{
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ߴ<EFBFBD><DFB4>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ձ<EFBFBD>־
|
||||
uart_query(BLUETOOTH_CH9141_INDEX, &bluetooth_ch9141_data);
|
||||
fifo_write_buffer(&bluetooth_ch9141_fifo, &bluetooth_ch9141_data, 1); // <20><><EFBFBD><EFBFBD> FIFO
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
// @param mode <20><><EFBFBD><EFBFBD>ģʽ MASTER_MODE(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>SLAVE_MODE(<28>ӻ<EFBFBD>)
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
// @note
|
||||
// <09><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ֻ<EFBFBD><D6BB>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mac<61><63>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ʹ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뽫mac<61><63><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||||
// <09><><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD>mac<61><63>ַΪ61:62:63:64:65:66<36><36><EFBFBD><EFBFBD>ʹ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ʱ<EFBFBD><CAB1>Ӧ<EFBFBD><D3A6>д
|
||||
// bluetooth_ch9141_connect("66:65:64:63:62:61,000000");
|
||||
// 58:B7:33:E4:C2:84Ϊmac<61><63>ַ ,Ϊ<>ָ<EFBFBD><D6B8><EFBFBD> 000000Ϊ<30>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <09>ӻ<EFBFBD>MAC<41><43>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// int8 salve_mac_password[] = "80:90:2C:E4:C2:84,000000";
|
||||
// @param mode <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ MASTER_MODE(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>SLAVE_MODE(<28>ӻ<EFBFBD>)
|
||||
// @return uint8 <20><>ʼ<EFBFBD><CABC>״̬ 0-<2D>ɹ<EFBFBD> 1-ʧ<><CAA7>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void bluetooth_ch9141_init(CH9141_MODE_enum mode, int8 *salve_mac_password)
|
||||
uint8 bluetooth_ch9141_init (void)
|
||||
{
|
||||
int8 *str = salve_mac_password;
|
||||
|
||||
if(str != NULL)
|
||||
{
|
||||
while(*str)
|
||||
{
|
||||
if(*str++ == 0x20)
|
||||
{
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>пո<D0BF>
|
||||
ZF_ASSERT(0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
boolean irq_status;
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD>Ϊ115200<30><30>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
wireless_type = WIRELESS_CH9141;
|
||||
|
||||
gpio_init(BLUETOOTH_CH9141_RTS_PIN, GPI, 0, PULLDOWN);
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uart_init (BLUETOOTH_CH9141_UART, BLUETOOTH_CH9141_UART_BAUD, BLUETOOTH_CH9141_UART_TX, BLUETOOTH_CH9141_UART_RX); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
irq_status = areInterruptsEnabled();
|
||||
enableInterrupts();
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ӳɹ<D3B3><C9B9>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ<EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5>ó<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳɹ<DCB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ӳɹ<D3B3><C9B9>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ<EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5>ó<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳɹ<DCB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F>ϵ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ôӻ<C3B4><D3BB><EFBFBD><EFBFBD>ϵ磬Ȼ<E7A3AC><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>
|
||||
|
||||
if(MASTER_MODE == mode)
|
||||
{
|
||||
//1.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>mac<61><63>ַ<EFBFBD>Ĵӻ<C4B4><D3BB>豸
|
||||
bluetooth_ch9141_enter_at_mode(); //<2F><><EFBFBD><EFBFBD>ATģʽ
|
||||
bluetooth_ch9141_set_mode(mode); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
bluetooth_ch9141_get_mac_address();//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>MAC<41><43>ַ
|
||||
bluetooth_ch9141_reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD>Ҫ<EFBFBD><D2AA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>òŻ<C3B2><C5BB><EFBFBD>Ч
|
||||
bluetooth_ch9141_enter_at_mode(); //<2F><><EFBFBD><EFBFBD>ATģʽ
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ֮<CABD><D6AE><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>λȻ<CEBB><C8BB><EFBFBD>ٴν<D9B4><CEBD><EFBFBD>ATģʽ<C4A3><CABD><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>ò<EFBFBD><C3B2>ɹ<EFBFBD>
|
||||
bluetooth_ch9141_set_tx_power(TX_POWER_4DB);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB9><EFBFBD>
|
||||
//===================<3D>ر<EFBFBD>ע<EFBFBD><D7A2>==================
|
||||
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ֻ<EFBFBD><D6BB>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mac<61><63>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ʹ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뽫mac<61><63><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD>mac<61><63>ַΪ61:62:63:64:65:66<36><36><EFBFBD><EFBFBD>ʹ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ʱ<EFBFBD><CAB1>Ӧ<EFBFBD><D3A6>д
|
||||
//bluetooth_ch9141_connect("66:65:64:63:62:61,000000");
|
||||
//58:B7:33:E4:C2:84Ϊmac<61><63>ַ ,Ϊ<>ָ<EFBFBD><D6B8><EFBFBD> 000000Ϊ<30>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F>ӻ<EFBFBD>MAC<41><43>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//int8 salve_mac_password[] = "80:90:2C:E4:C2:84,000000";
|
||||
|
||||
bluetooth_ch9141_default_connect(salve_mac_password); //<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>´β<C2B4><CEB2><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>Ӵӻ<D3B4>
|
||||
bluetooth_ch9141_connect(salve_mac_password); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õĴӻ<C4B4><D3BB><EFBFBD>ַ
|
||||
|
||||
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ӳɹ<D3B3>
|
||||
while(MASTER_CONNECTED != bluetooth_ch9141_get_status(mode));
|
||||
bluetooth_ch9141_exit_at_mode(); //<2F>˳<EFBFBD>ATģʽ
|
||||
}
|
||||
else if(SLAVE_MODE == mode)
|
||||
{
|
||||
//2.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
bluetooth_ch9141_enter_at_mode(); //<2F><><EFBFBD><EFBFBD>ATģʽ
|
||||
bluetooth_ch9141_set_mode(mode); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
bluetooth_ch9141_get_mac_address();//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>MAC<41><43>ַ
|
||||
bluetooth_ch9141_reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD>Ҫ<EFBFBD><D2AA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>òŻ<C3B2><C5BB><EFBFBD>Ч
|
||||
bluetooth_ch9141_enter_at_mode(); //<2F><><EFBFBD><EFBFBD>ATģʽ
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ֮<CABD><D6AE><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>λȻ<CEBB><C8BB><EFBFBD>ٴν<D9B4><CEBD><EFBFBD>ATģʽ<C4A3><CABD><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>ò<EFBFBD><C3B2>ɹ<EFBFBD>
|
||||
bluetooth_ch9141_set_tx_power(TX_POWER_4DB);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB9><EFBFBD>
|
||||
bluetooth_ch9141_set_name("ble");
|
||||
bluetooth_ch9141_set_password(1, "000000"); //000000Ϊ<30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>
|
||||
bluetooth_ch9141_reset(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD>Ҫ<EFBFBD><D2AA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>òŻ<C3B2><C5BB><EFBFBD>Ч
|
||||
bluetooth_ch9141_enter_at_mode(); //<2F><><EFBFBD><EFBFBD>ATģʽ
|
||||
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ӳɹ<D3B3>
|
||||
while(SLAVE_CONNECTED != bluetooth_ch9141_get_status(mode));
|
||||
bluetooth_ch9141_exit_at_mode(); //<2F>˳<EFBFBD>ATģʽ
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ǿ<EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><D4B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//bluetooth_ch9141_enter_at_mode();
|
||||
//int16 rssi = bluetooth_ch9141_get_rssi();
|
||||
|
||||
disableInterrupts();
|
||||
restoreInterrupts(irq_status);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD>Ϊ115200 Ϊ<><CEAA><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fifo_init(&bluetooth_ch9141_fifo, bluetooth_ch9141_buffer, BLUETOOTH_CH9141_BUFFER_SIZE);
|
||||
gpio_init(BLUETOOTH_CH9141_RTS_PIN, GPI, 1, PULLUP); // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uart_init(BLUETOOTH_CH9141_INDEX, BLUETOOTH_CH9141_BUAD_RATE, BLUETOOTH_CH9141_RX_PIN, BLUETOOTH_CH9141_TX_PIN);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
|
||||
// @param buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
|
||||
// @param len <20><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
|
||||
// @return uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 bluetooth_ch9141_send_buff (uint8 *buff, uint32 len)
|
||||
{
|
||||
uint16 time_count = 0;
|
||||
while(len > 30)
|
||||
{
|
||||
time_count = 0;
|
||||
while(gpio_get(BLUETOOTH_CH9141_RTS_PIN) && time_count++ < BLUETOOTH_CH9141_TIMEOUT_COUNT) // <20><><EFBFBD><EFBFBD>RTSΪ<53>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 1);
|
||||
if(time_count >= BLUETOOTH_CH9141_TIMEOUT_COUNT)
|
||||
return len; // ģ<><C4A3>æ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>while<6C>ȴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ú<EFBFBD><C3BA><EFBFBD>ע<EFBFBD>͵<EFBFBD>while<6C>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滻<EFBFBD><E6BBBB>if<69><66><EFBFBD><EFBFBD>
|
||||
uart_putbuff(BLUETOOTH_CH9141_INDEX, buff, 30);
|
||||
|
||||
buff += 30; // <20><>ַƫ<D6B7><C6AB>
|
||||
len -= 30; // <20><><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
time_count = 0;
|
||||
while(gpio_get(BLUETOOTH_CH9141_RTS_PIN) && time_count++ < BLUETOOTH_CH9141_TIMEOUT_COUNT) // <20><><EFBFBD><EFBFBD>RTSΪ<53>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 1);
|
||||
if(time_count >= BLUETOOTH_CH9141_TIMEOUT_COUNT)
|
||||
return len; // ģ<><C4A3>æ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>while<6C>ȴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ú<EFBFBD><C3BA><EFBFBD>ע<EFBFBD>͵<EFBFBD>while<6C>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滻<EFBFBD><E6BBBB>if<69><66><EFBFBD><EFBFBD>
|
||||
uart_putbuff(BLUETOOTH_CH9141_INDEX, buff, len); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
// @param buff <20>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
|
||||
// @param len <20><><EFBFBD><EFBFBD>
|
||||
// @return uint32 ʵ<>ʶ<EFBFBD>ȡ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 bluetooth_ch9141_read_buff (uint8 *buff, uint32 len)
|
||||
{
|
||||
uint32 data_len = len;
|
||||
fifo_read_buffer(&bluetooth_ch9141_fifo, buff, &data_len, FIFO_READ_AND_CLEAN);
|
||||
return data_len;
|
||||
}
|
||||
|
||||
|
||||
@@ -31,63 +31,58 @@
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
#define BLUETOOTH_CH9141_UART UART_2 //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><>ʹ<EFBFBD>õ<EFBFBD><C3B5>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
#define BLUETOOTH_CH9141_UART_TX UART2_TX_P10_5 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RX<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>Ƭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>D16<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define BLUETOOTH_CH9141_UART_RX UART2_RX_P10_6 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TX<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>Ƭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>D17<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define BLUETOOTH_CH9141_UART_BAUD 115200
|
||||
|
||||
#define BLUETOOTH_CH9141_RTS_PIN P10_2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> ָʾ<D6B8><CABE>ǰģ<C7B0><C4A3><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8 *buffer; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
uint32 head; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷָ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>յĻ<EFBFBD><EFBFBD><EFBFBD>
|
||||
uint32 end; // <20><><EFBFBD><EFBFBD>βָ<CEB2><D6B8> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ǿջ<C7BF><D5BB>棨<EFBFBD><E6A3A8><EFBFBD><EFBFBD>ȫ<EFBFBD>ճ<EFBFBD><D5B3>⣩
|
||||
uint32 size; // <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD>С
|
||||
uint32 max; // <20><><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD>С
|
||||
}fifo_struct;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
TX_POWER_0DB = 0, //0DB
|
||||
TX_POWER_1DB, //1DB
|
||||
TX_POWER_2DB, //2DB
|
||||
TX_POWER_3DB, //3DB
|
||||
TX_POWER_4DB, //4DB
|
||||
TX_POWER_MINUS_8DB, //-8DB
|
||||
TX_POWER_MINUS_14DB,//-14DB
|
||||
TX_POWER_MINUS_20DB,//-20DB
|
||||
}CH9141_TX_POWEER_enum;
|
||||
FIFO_SUCCESS,
|
||||
|
||||
FIFO_BUFFER_NULL,
|
||||
FIFO_SPACE_NO_ENOUGH,
|
||||
FIFO_DATA_NO_ENOUGH,
|
||||
}fifo_state_enum;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MASTER_NO_INIT = 0, //<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ<EFBFBD><CABC>
|
||||
MASTER_SCANNING, //<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD>
|
||||
MASTER_CONNECTING, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
MASTER_CONNECTED, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
MASTER_DISCONNECTED, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӶϿ<D3B6>
|
||||
|
||||
SLAVE_NO_INIT, //<2F>ӻ<EFBFBD>δ<EFBFBD><CEB4>ʼ<EFBFBD><CABC>
|
||||
SLAVE_OK_INIT, //<2F>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD>ɳ<EFBFBD>ʼ<EFBFBD><CABC>
|
||||
SLAVE_BROADCAST, //<2F>ӻ<EFBFBD><D3BB>㲥<EFBFBD><E3B2A5>
|
||||
SLAVE_BROADCAST_READY, //<2F>ӻ<EFBFBD><EFBFBD><D7BC><EFBFBD>㲥
|
||||
SLAVE_CONNECT_TIMEOUT, //<2F>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD>ӳ<EFBFBD>ʱ
|
||||
SLAVE_CONNECTED, //<2F>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SLAVE_ERROR, //<2F>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>
|
||||
}CH9141_STATUS_enum;
|
||||
FIFO_READ_AND_CLEAN,
|
||||
FIFO_READ_ONLY,
|
||||
}fifo_operation_enum;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
BROADCAST_MODE = 0, //<2F>㲥ģʽ
|
||||
MASTER_MODE, //<2F><><EFBFBD><EFBFBD>ģʽ
|
||||
SLAVE_MODE, //<2F>ӻ<EFBFBD>ģʽ
|
||||
}CH9141_MODE_enum;
|
||||
fifo_state_enum fifo_init (fifo_struct *fifo, uint8 *buffer_addr, uint32 size);
|
||||
void fifo_head_offset (fifo_struct *fifo, uint32 offset);
|
||||
void fifo_end_offset (fifo_struct *fifo, uint32 offset);
|
||||
void fifo_clear (fifo_struct *fifo);
|
||||
uint32 fifo_used (fifo_struct *fifo);
|
||||
|
||||
extern uint8 uart_flag;
|
||||
extern uint8 uart_data;
|
||||
extern uint8 mac_address[17]; //<2F><><EFBFBD><EFBFBD>mac<61><63>ַ
|
||||
fifo_state_enum fifo_read_buffer (fifo_struct *fifo, uint8 *dat, uint32 *length, fifo_operation_enum flag);
|
||||
fifo_state_enum fifo_write_buffer (fifo_struct *fifo, uint8 *dat, uint32 length);
|
||||
|
||||
void bluetooth_ch9141_uart_callback(void);
|
||||
void bluetooth_ch9141_enter_at_mode(void);
|
||||
void bluetooth_ch9141_exit_at_mode(void);
|
||||
void bluetooth_ch9141_reset(void);
|
||||
void bluetooth_ch9141_get_mac_address(void);
|
||||
int16 bluetooth_ch9141_get_rssi(void);
|
||||
uint32 bluetooth_ch9141_send_buff(uint8 *buff, uint32 len);
|
||||
void bluetooth_ch9141_init(CH9141_MODE_enum mode, int8 *salve_mac_password);
|
||||
|
||||
|
||||
#define BLUETOOTH_CH9141_INDEX UART_2 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> 1 <20><>Ӧʹ<D3A6>õĴ<C3B5><C4B4>ں<EFBFBD>
|
||||
#define BLUETOOTH_CH9141_BUAD_RATE 115200 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> 1 <20><>Ӧʹ<D3A6>õĴ<C3B5><C4B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define BLUETOOTH_CH9141_TX_PIN UART2_RX_P10_6 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> 1 <20><>Ӧģ<D3A6><C4A3><EFBFBD><EFBFBD> TX Ҫ<>ӵ<EFBFBD><D3B5><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD> RX
|
||||
#define BLUETOOTH_CH9141_RX_PIN UART2_TX_P10_5 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> 1 <20><>Ӧģ<D3A6><C4A3><EFBFBD><EFBFBD> RX Ҫ<>ӵ<EFBFBD><D3B5><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD> TX
|
||||
#define BLUETOOTH_CH9141_RTS_PIN P10_2 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> 1 <20><>Ӧģ<D3A6><C4A3><EFBFBD><EFBFBD> RTS <20><><EFBFBD><EFBFBD>
|
||||
|
||||
#define BLUETOOTH_CH9141_BUFFER_SIZE 64
|
||||
#define BLUETOOTH_CH9141_TIMEOUT_COUNT 500
|
||||
|
||||
|
||||
|
||||
void bluetooth_ch9141_uart_callback (void);
|
||||
|
||||
uint8 bluetooth_ch9141_init (void);
|
||||
|
||||
uint32 bluetooth_ch9141_send_buff (uint8 *buff, uint32 len);
|
||||
uint32 bluetooth_ch9141_read_buff (uint8 *buff, uint32 len);
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,514 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2021,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>QQȺ<51><C8BA>һȺ<D2BB><C8BA>179029047(<28><><EFBFBD><EFBFBD>) <20><>Ⱥ<EFBFBD><C8BA>244861897
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file SEEKFREE_GPS_TAU1201.c
|
||||
* @company <09>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <09><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <09>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software IAR 8.32.4 or MDK 5.28
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2021-12-30
|
||||
* @note
|
||||
* <09><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <09><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* RX <09>鿴 GPS_TAU1201_TX<54>궨<EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* TX <20>鿴 GPS_TAU1201_TX<54>궨<EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* GND <09><>Դ<EFBFBD><D4B4>
|
||||
* VCC 5V<35><56>Դ
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
|
||||
#include "zf_stm_systick.h"
|
||||
#include "zf_uart.h"
|
||||
#include "math.h"
|
||||
#include "SEEKFREE_GPS_TAU1201.h"
|
||||
#include <string.h>
|
||||
|
||||
|
||||
|
||||
gps_info_struct gps_tau1201;
|
||||
uint8 gps_tau1201_buffer[100];
|
||||
uint8 gps_tau1201_num; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8 gps_tau1201_flag; //1<><31><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD> 0<><30>û<EFBFBD>вɼ<D0B2><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <09><>ȡָ<C8A1><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param num <20>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param *str <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// @return uint8 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 get_parameter_index(uint8 num, char *str)
|
||||
{
|
||||
uint8 i, j = 0;
|
||||
int8* temp;
|
||||
uint8 len = 0, len1;
|
||||
|
||||
temp = strchr(str, '\n');
|
||||
if(NULL != temp)
|
||||
{
|
||||
len = (uint8)((uint32)temp - (uint32)str + 1);
|
||||
}
|
||||
|
||||
for(i = 0;i < len;i ++)
|
||||
{
|
||||
if(str[i] == ',')
|
||||
{
|
||||
j++;
|
||||
}
|
||||
if(j == num)
|
||||
{
|
||||
len1 = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return len1;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <09><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>Ϊint
|
||||
// @param *s <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// @return double <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
int str_to_int(char *buf)
|
||||
{
|
||||
int return_value = 0;
|
||||
int dat;
|
||||
char *str = buf;
|
||||
while(*str != '\0')
|
||||
{
|
||||
dat = *str - '0';
|
||||
return_value = return_value * 10 + dat;
|
||||
str ++;
|
||||
}
|
||||
return return_value;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <09><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>,֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊint
|
||||
// @param *s <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// @return float <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
int get_int_number(char *s)
|
||||
{
|
||||
char buf[10];
|
||||
uint8 i;
|
||||
int return_value;
|
||||
i = get_parameter_index(1, s);
|
||||
i = i - 1;
|
||||
strncpy(buf, s, i);
|
||||
buf[i] = 0;
|
||||
return_value = str_to_int(buf);
|
||||
return return_value;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <09><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>Ϊdouble
|
||||
// @param *s <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// @return double <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
double str_to_double(char *buf)
|
||||
{
|
||||
double return_value = 0;
|
||||
double dat;
|
||||
int integer = 1;
|
||||
char *str = buf;
|
||||
int8 negative_flag = 1;
|
||||
int i;
|
||||
if('-' == *str)
|
||||
{
|
||||
negative_flag = -1;
|
||||
str++;
|
||||
}
|
||||
|
||||
while(*str != '\0')
|
||||
{
|
||||
dat = *str - '0';
|
||||
if('.' == *str)
|
||||
{
|
||||
integer = 0;
|
||||
i = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( integer == 1 )
|
||||
{
|
||||
return_value = return_value * 10 + dat;
|
||||
}
|
||||
else
|
||||
{
|
||||
return_value = return_value + dat / (10 * i);
|
||||
i = i * 10 ;
|
||||
}
|
||||
}
|
||||
str ++;
|
||||
}
|
||||
return return_value*negative_flag;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <09><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>,֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊfloat
|
||||
// @param *s <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// @return float <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
float get_float_number(char *s)
|
||||
{
|
||||
uint8 i;
|
||||
char buf[10];
|
||||
float return_value;
|
||||
|
||||
i=get_parameter_index(1, s);
|
||||
i = i - 1;
|
||||
strncpy(buf, s, i);
|
||||
buf[i] = 0;
|
||||
return_value = (float)str_to_double(buf);
|
||||
return return_value;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <09><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>,֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊdouble
|
||||
// @param *s <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// @return double <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
double get_double_number(char *s)
|
||||
{
|
||||
uint8 i;
|
||||
char buf[10];
|
||||
double return_value;
|
||||
|
||||
i = get_parameter_index(1, s);
|
||||
i = i - 1;
|
||||
strncpy(buf, s, i);
|
||||
buf[i] = 0;
|
||||
return_value = str_to_double(buf);
|
||||
return return_value;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <09><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
// @param *time <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void utc_to_btc(gps_time_struct *time)
|
||||
{
|
||||
uint8 day_num;
|
||||
|
||||
time->hour = time->hour + 8;
|
||||
if(time->hour > 23)
|
||||
{
|
||||
time->hour -= 24;
|
||||
time->day += 1;
|
||||
|
||||
if(2 == time->month)
|
||||
{
|
||||
day_num = 28;
|
||||
if((time->year%4 == 0 && time->year%100 != 0) || time->year%400 == 0)//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
{
|
||||
day_num ++;//<2F><><EFBFBD><EFBFBD> 2<><32>Ϊ29<32><39>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
day_num = 31;//1 3 5 7 8 10 12<31><32>Щ<EFBFBD>·<EFBFBD>Ϊ31<33><31>
|
||||
if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
|
||||
{
|
||||
day_num = 30;
|
||||
}
|
||||
}
|
||||
|
||||
if(time->day > day_num)
|
||||
{
|
||||
time->day = 1;
|
||||
time->month++;
|
||||
if(time->month > 12)
|
||||
{
|
||||
time->month -= 12;
|
||||
time->year ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief RMC<4D><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param *line <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// @param *gps <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @return uint8 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲻ<EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 gps_gnrmc_parse(char *line, gps_info_struct *gps)
|
||||
{
|
||||
uint8 state, temp;
|
||||
|
||||
double latitude; //<2F><><EFBFBD><EFBFBD>
|
||||
double longitude;//γ<><CEB3>
|
||||
|
||||
float lati_cent_tmp, lati_second_tmp;
|
||||
float long_cent_tmp, long_second_tmp;
|
||||
float speed_tmp;
|
||||
char *buf = line;
|
||||
uint8 return_value = 0;
|
||||
|
||||
state = buf[get_parameter_index(2, buf)];
|
||||
|
||||
gps->state = 0;
|
||||
if (state == 'A') //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
return_value = 1;
|
||||
gps->state = 1;
|
||||
gps -> ns = buf[get_parameter_index(4, buf)];
|
||||
gps -> ew = buf[get_parameter_index(6, buf)];
|
||||
|
||||
latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
|
||||
longitude = get_double_number(&buf[get_parameter_index( 5, buf)]);
|
||||
|
||||
gps->latitude_degree = (int)latitude / 100; //γ<><CEB3>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>
|
||||
lati_cent_tmp = (latitude - gps->latitude_degree * 100);
|
||||
gps->latitude_cent = (int)lati_cent_tmp;
|
||||
lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000;
|
||||
gps->latitude_second = (int)lati_second_tmp;
|
||||
|
||||
gps->longitude_degree = (int)longitude / 100; //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>
|
||||
long_cent_tmp = (longitude - gps->longitude_degree * 100);
|
||||
gps->longitude_cent = (int)long_cent_tmp;
|
||||
long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000;
|
||||
gps->longitude_second = (int)long_second_tmp;
|
||||
|
||||
gps->latitude = gps->latitude_degree + (double)gps->latitude_cent/60 + (double)gps->latitude_second/600000;
|
||||
gps->longitude = gps->longitude_degree + (double)gps->longitude_cent/60 + (double)gps->longitude_second/600000;
|
||||
|
||||
speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); //<2F>ٶ<EFBFBD>(<28><><EFBFBD><EFBFBD>/Сʱ)
|
||||
gps->speed = speed_tmp * 1.85f; //ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>/Сʱ
|
||||
gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); //<2F>Ƕ<EFBFBD>
|
||||
}
|
||||
//<2F>ڶ<EFBFBD>λû<CEBB><C3BB><EFBFBD><EFBFBD>ЧǰҲ<C7B0><D2B2><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ݵģ<DDB5><C4A3><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
||||
gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); //ʱ<><CAB1>
|
||||
gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
|
||||
gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
|
||||
temp = get_parameter_index(9, buf);
|
||||
gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); //<2F><><EFBFBD><EFBFBD>
|
||||
gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
|
||||
gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0')+2000;
|
||||
|
||||
utc_to_btc(&gps->time);
|
||||
|
||||
|
||||
return return_value;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief GGA<47><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param *line <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// @param *gps <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @return uint8 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲻ<EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 gps_gngga_parse(char *line, gps_info_struct *gps)
|
||||
{
|
||||
uint8 state;
|
||||
char *buf = line;
|
||||
uint8 return_value = 0;
|
||||
|
||||
state = buf[get_parameter_index(2, buf)];
|
||||
|
||||
if (state != ',')
|
||||
{
|
||||
gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
|
||||
gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); //<2F>߶<EFBFBD> = <20><><EFBFBD>θ߶<CEB8> + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ˮ<CBAE><D7BC><EFBFBD>ĸ߶<C4B8>
|
||||
return_value = 1;
|
||||
}
|
||||
|
||||
return return_value;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <09><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>㵽<EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
// @param latitude1 <09><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
|
||||
// @param longitude1 <09><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
// @param latitude2 <09>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
|
||||
// @param longitude2 <09>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
// @return double <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
double get_two_points_distance(double latitude1, double longitude1, double latitude2, double longitude2)
|
||||
{
|
||||
const double EARTH_RADIUS = 6378137;//<2F><><EFBFBD><EFBFBD><EFBFBD>뾶(<28><>λ<EFBFBD><CEBB>m)
|
||||
double rad_latitude1;
|
||||
double rad_latitude2;
|
||||
double rad_longitude1;
|
||||
double rad_longitude2;
|
||||
double distance;
|
||||
double a;
|
||||
double b;
|
||||
|
||||
rad_latitude1 = ANGLE_TO_RAD(latitude1);//<2F><><EFBFBD>ݽǶȼ<C7B6><C8BC>㻡<EFBFBD><E3BBA1>
|
||||
rad_latitude2 = ANGLE_TO_RAD(latitude2);
|
||||
rad_longitude1 = ANGLE_TO_RAD(longitude1);
|
||||
rad_longitude2 = ANGLE_TO_RAD(longitude2);
|
||||
|
||||
a = rad_latitude1 - rad_latitude2;
|
||||
b = rad_longitude1 - rad_longitude2;
|
||||
|
||||
distance = 2 * asin(sqrt(pow(sin(a/2),2) + cos(rad_latitude1)*cos(rad_latitude2)*pow(sin(b/2),2)));//google maps<70><73><EFBFBD><EFBFBD>ʵ<EFBFBD>ֵ<EFBFBD><D6B5>㷨
|
||||
distance = distance * EARTH_RADIUS;
|
||||
|
||||
return distance;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <09><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>㵽<EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>λ<EFBFBD><CEBB>
|
||||
// @param latitude1 <09><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
|
||||
// @param longitude1 <09><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
// @param latitude2 <09>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
|
||||
// @param longitude2 <09>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
// @return double <20><><EFBFBD>ط<EFBFBD>λ<EFBFBD>ǣ<EFBFBD>0<EFBFBD><30>360<36><30>
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
double get_two_points_azimuth(double latitude1, double longitude1, double latitude2, double longitude2)
|
||||
{
|
||||
latitude1 = ANGLE_TO_RAD(latitude1);
|
||||
latitude2 = ANGLE_TO_RAD(latitude2);
|
||||
longitude1 = ANGLE_TO_RAD(longitude1);
|
||||
longitude2 = ANGLE_TO_RAD(longitude2);
|
||||
|
||||
double x = sin(longitude2 - longitude1) * cos(latitude2);
|
||||
double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
|
||||
double angle = RAD_TO_ANGLE(atan2(x,y));
|
||||
return angle>0?angle:angle+360;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief <09><><EFBFBD><EFBFBD>GPS<50><53><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void gps_data_parse(void)
|
||||
{
|
||||
if(0 == strncmp((char *)&gps_tau1201_buffer[3], "RMC", 3))
|
||||
{
|
||||
gps_gnrmc_parse((char *)gps_tau1201_buffer, &gps_tau1201);
|
||||
}
|
||||
|
||||
else if(0 == strncmp((char *)&gps_tau1201_buffer[3], "GGA", 3))
|
||||
{
|
||||
gps_gngga_parse((char *)gps_tau1201_buffer, &gps_tau1201);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief GPS<50><53><EFBFBD>ڻص<DABB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
// @param void
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage: <09>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ڴ<EFBFBD><DAB4>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ڽ<EFBFBD><DABD>е<EFBFBD><D0B5><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void gps_uart_callback(void)
|
||||
{
|
||||
uint8 dat;
|
||||
|
||||
uart_query(GPS_TAU1201_UART, &dat);
|
||||
if('$' == dat || ('$' != gps_tau1201_buffer[0]))//֡ͷУ<CDB7><D0A3>
|
||||
{
|
||||
gps_tau1201_num = 0;
|
||||
}
|
||||
gps_tau1201_buffer[gps_tau1201_num++] = dat;
|
||||
|
||||
if('\n' == dat)
|
||||
{
|
||||
//<2F>յ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
gps_tau1201_buffer[gps_tau1201_num] = 0; //<2F><>ĩβ<C4A9><CEB2><EFBFBD><EFBFBD>\0
|
||||
gps_data_parse(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
gps_tau1201_flag = 1;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief GPS<50><53>ʼ<EFBFBD><CABC>
|
||||
// @param void
|
||||
// @return void
|
||||
// @since v1.0
|
||||
// Sample usage:
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void gps_init(void)
|
||||
{
|
||||
const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
|
||||
const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
|
||||
const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
|
||||
|
||||
const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
|
||||
const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
|
||||
const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
|
||||
const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
|
||||
const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
|
||||
const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
|
||||
const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
|
||||
const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
|
||||
const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
|
||||
|
||||
gps_type = GPS_TAU1201;
|
||||
|
||||
enableInterrupts();
|
||||
systick_delay_ms(STM0, 500);//<2F>ȴ<EFBFBD>GPS<50><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ʼ<EFBFBD><CABC>
|
||||
uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
|
||||
|
||||
uart_putbuff(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate));//<2F><><EFBFBD><EFBFBD>GPS<50><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ10hz<68><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ1hz
|
||||
systick_delay_ms(STM0, 200);
|
||||
|
||||
uart_putbuff(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc));//<2F><><EFBFBD><EFBFBD>rmc<6D><63><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 50);
|
||||
uart_putbuff(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga));//<2F><><EFBFBD><EFBFBD>gga<67><61><EFBFBD><EFBFBD>
|
||||
systick_delay_ms(STM0, 50);
|
||||
uart_putbuff(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
|
||||
systick_delay_ms(STM0, 50);
|
||||
uart_putbuff(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
|
||||
systick_delay_ms(STM0, 50);
|
||||
uart_putbuff(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
|
||||
systick_delay_ms(STM0, 50);
|
||||
uart_putbuff(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
|
||||
systick_delay_ms(STM0, 50);
|
||||
uart_putbuff(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
|
||||
systick_delay_ms(STM0, 50);
|
||||
uart_putbuff(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
|
||||
systick_delay_ms(STM0, 50);
|
||||
uart_putbuff(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
|
||||
systick_delay_ms(STM0, 50);
|
||||
uart_putbuff(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
|
||||
systick_delay_ms(STM0, 50);
|
||||
uart_putbuff(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
|
||||
systick_delay_ms(STM0, 50);
|
||||
disableInterrupts();
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
/*********************************************************************************************************************
|
||||
* COPYRIGHT NOTICE
|
||||
* Copyright (c) 2021,<2C><><EFBFBD>ɿƼ<C9BF>
|
||||
* All rights reserved.
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>QQȺ<51><C8BA>һȺ<D2BB><C8BA>179029047(<28><><EFBFBD><EFBFBD>) <20><>Ⱥ<EFBFBD><C8BA>244861897
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>У<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>;<EFBFBD><CDBE>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @file SEEKFREE_GPS_TAU1201.c
|
||||
* @company <09>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* @author <09><><EFBFBD>ɿƼ<C9BF>(QQ3184284598)
|
||||
* @version <09>鿴doc<6F><63>version<6F>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* @Software IAR 8.32.4 or MDK 5.28
|
||||
* @Taobao https://seekfree.taobao.com/
|
||||
* @date 2021-12-30
|
||||
* @note
|
||||
* <09><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <09><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* RX <09>鿴 GPS_TAU1201_RX<52>궨<EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* TX <20>鿴 GPS_TAU1201_TX<54>궨<EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* GND <09><>Դ<EFBFBD><D4B4>
|
||||
* VCC 5V<35><56>Դ
|
||||
* ------------------------------------
|
||||
********************************************************************************************************************/
|
||||
#ifndef _SEEKFREE_GPS_TAU1201_h
|
||||
#define _SEEKFREE_GPS_TAU1201_h
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
#define GPS_TAU1201_UART UART_3
|
||||
#define GPS_TAU1201_RX UART3_TX_P15_6 // GPS RX<52><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>
|
||||
#define GPS_TAU1201_TX UART3_RX_P15_7 // GPS TX<54><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
|
||||
#define ANGLE_TO_RAD(X) (X * PI / 180.0)//<2F>Ƕ<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
#define RAD_TO_ANGLE(X) (X * 180.0 / PI)//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>Ƕ<EFBFBD>
|
||||
#define PI 3.1415926535898
|
||||
|
||||
|
||||
|
||||
typedef struct{
|
||||
uint16 year;
|
||||
uint8 month;
|
||||
uint8 day;
|
||||
uint8 hour;
|
||||
uint8 minute;
|
||||
uint8 second;
|
||||
}gps_time_struct;
|
||||
|
||||
typedef struct{
|
||||
gps_time_struct time; //ʱ<><CAB1>
|
||||
|
||||
uint8 state; //<2F><>Ч״̬ 1<><31><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ч 0<><30><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ч
|
||||
|
||||
uint16 latitude_degree; //<2F><>
|
||||
uint16 latitude_cent; //<2F><>
|
||||
uint16 latitude_second; //<2F><>
|
||||
uint16 longitude_degree; //<2F><>
|
||||
uint16 longitude_cent; //<2F><>
|
||||
uint16 longitude_second; //<2F><>
|
||||
|
||||
double latitude; //<2F><><EFBFBD><EFBFBD>
|
||||
double longitude; //γ<><CEB3>
|
||||
|
||||
int8 ns; //γ<>Ȱ<EFBFBD><C8B0><EFBFBD> N<><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> S<><53><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD><EFBFBD><EFBFBD>
|
||||
int8 ew; //<2F><><EFBFBD>Ȱ<EFBFBD><C8B0><EFBFBD> E<><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> W<><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
float speed; //<2F>ٶȣ<D9B6><C8A3><EFBFBD><EFBFBD><EFBFBD>/ÿСʱ<D0A1><CAB1>
|
||||
float direction; //<2F><><EFBFBD>溽<EFBFBD><E6BABD><EFBFBD><EFBFBD>000.0~359.9 <20>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>汱<EFBFBD><E6B1B1>Ϊ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><D7BC>
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>GNGGA<47><41><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>ȡ
|
||||
uint8 satellite_used; //<2F><><EFBFBD>ڶ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float height; //<2F>߶<EFBFBD>
|
||||
}gps_info_struct;
|
||||
|
||||
|
||||
|
||||
extern gps_info_struct gps_tau1201;
|
||||
extern uint8 gps_tau1201_flag;
|
||||
|
||||
|
||||
|
||||
double get_two_points_distance(double lat1, double lng1, double lat2, double lng2);
|
||||
double get_two_points_azimuth(double lat1, double lon1, double lat2, double lon2);
|
||||
void gps_uart_callback(void);
|
||||
void gps_init(void);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -49,6 +49,7 @@ uint8 receive_num = 0;
|
||||
vuint8 uart_receive_flag;
|
||||
|
||||
uint8 link_list_num;
|
||||
int16 timeout = MT9V03X_INIT_TIMEOUT;
|
||||
|
||||
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int16 MT9V03X_CFG[CONFIG_FINISH][2]=
|
||||
@@ -62,7 +63,8 @@ int16 MT9V03X_CFG[CONFIG_FINISH][2]=
|
||||
{LR_OFFSET, 0}, //ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>Ϊ188 376 752ʱ<32><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB> <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
{UD_OFFSET, 0}, //ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>Ϊ120 240 480ʱ<30><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB> <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
{GAIN, 32}, //ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Χ16-64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸ı<C2B8>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>
|
||||
|
||||
{PCLK_MODE, 0}, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MT9V034 V2.0<EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ汾֧<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ģʽ<C4A3><CABD><EFBFBD><EFBFBD> PCLKģʽ Ĭ<>ϣ<EFBFBD>0 <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>0 1<><31> 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źţ<C5BA>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źš<C5BA>(ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>CH32V307<30><37>DVP<56>ӿڻ<D3BF>STM32<33><32>DCMI<4D>ӿڲɼ<DAB2><C9BC><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>Ϊ1)
|
||||
|
||||
{INIT, 0} //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC>ʼ<EFBFBD><CABC>
|
||||
};
|
||||
@@ -133,10 +135,20 @@ void set_config(UARTN_enum uartn, int16 buff[CONFIG_FINISH-1][2])
|
||||
uart_putbuff(uartn,send_buffer,4);
|
||||
systick_delay_ms(STM0, 2);
|
||||
}
|
||||
|
||||
timeout = MT9V03X_INIT_TIMEOUT;
|
||||
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
while(!uart_receive_flag);
|
||||
while(!uart_receive_flag && timeout-- > 0)
|
||||
{
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
uart_receive_flag = 0;
|
||||
while((0xff != receive[1]) || (0xff != receive[2]));
|
||||
timeout = MT9V03X_INIT_TIMEOUT;
|
||||
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ܻش<DCBB><D8B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
while(((0xff != receive[1]) || (0xff != receive[2])) && timeout-- > 0)
|
||||
{
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
//<2F><><EFBFBD>ϲ<EFBFBD><CFB2>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ᱣ<EFBFBD><E1B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>51<35><31>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>eeprom<6F><6D>
|
||||
//<2F><><EFBFBD><EFBFBD>set_exposure_time<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ع<EFBFBD><D8B9><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2>洢<EFBFBD><E6B4A2>eeprom<6F><6D>
|
||||
}
|
||||
@@ -165,8 +177,12 @@ void get_config(UARTN_enum uartn, int16 buff[CONFIG_FINISH-1][2])
|
||||
|
||||
uart_putbuff(uartn,send_buffer,4);
|
||||
|
||||
timeout = MT9V03X_INIT_TIMEOUT;
|
||||
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ܻش<DCBB><D8B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
while(!uart_receive_flag);
|
||||
while(!uart_receive_flag && timeout-- > 0)
|
||||
{
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
uart_receive_flag = 0;
|
||||
|
||||
buff[i][1] = receive[1]<<8 | receive[2];
|
||||
@@ -192,8 +208,12 @@ uint16 get_version(UARTN_enum uartn)
|
||||
|
||||
uart_putbuff(uartn,send_buffer,4);
|
||||
|
||||
timeout = MT9V03X_INIT_TIMEOUT;
|
||||
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ܻش<DCBB><D8B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
while(!uart_receive_flag);
|
||||
while(!uart_receive_flag && timeout-- > 0)
|
||||
{
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
uart_receive_flag = 0;
|
||||
|
||||
return ((uint16)(receive[1]<<8) | receive[2]);
|
||||
@@ -220,8 +240,12 @@ uint16 set_exposure_time(UARTN_enum uartn, uint16 light)
|
||||
|
||||
uart_putbuff(uartn,send_buffer,4);
|
||||
|
||||
timeout = MT9V03X_INIT_TIMEOUT;
|
||||
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ܻش<DCBB><D8B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
while(!uart_receive_flag);
|
||||
while(!uart_receive_flag && timeout-- > 0)
|
||||
{
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
uart_receive_flag = 0;
|
||||
|
||||
temp = receive[1]<<8 | receive[2];
|
||||
@@ -261,8 +285,12 @@ uint16 set_mt9v03x_reg(UARTN_enum uartn, uint8 addr, uint16 data)
|
||||
|
||||
uart_putbuff(uartn,send_buffer,4);
|
||||
|
||||
timeout = MT9V03X_INIT_TIMEOUT;
|
||||
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ܻش<DCBB><D8B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
while(!uart_receive_flag);
|
||||
while(!uart_receive_flag && timeout-- > 0)
|
||||
{
|
||||
systick_delay_ms(STM0, 1);
|
||||
}
|
||||
uart_receive_flag = 0;
|
||||
|
||||
temp = receive[1]<<8 | receive[2];
|
||||
@@ -307,16 +335,15 @@ void mt9v03x_init(void)
|
||||
gpio_init((PIN_enum)(MT9V03X_DATA_PIN+i), GPI, 0, PULLUP);
|
||||
}
|
||||
|
||||
link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>300M <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪFALLING
|
||||
link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, FALLING, MT9V03X_W*MT9V03X_H);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>300M <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪFALLING
|
||||
|
||||
eru_init(MT9V03X_VSYNC_PIN, FALLING); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>½<EFBFBD><C2BD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
restoreInterrupts(interrupt_state);
|
||||
}
|
||||
|
||||
|
||||
uint8 mt9v03x_finish_flag = 0; //һ<><D2BB>ͼ<EFBFBD><CDBC><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
|
||||
uint8 mt9v03x_dma_int_num; //<2F><>ǰDMA<4D>жϴ<D0B6><CFB4><EFBFBD>
|
||||
uint8 mt9v03x_dma_init_flag; //<2F><><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>DMA<4D>ı<EFBFBD>־λ
|
||||
uint8 mt9v03x_finish_flag = 0; //һ<><D2BB>ͼ<EFBFBD><CDBC><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
|
||||
uint8 mt9v03x_dma_int_num; //<2F><>ǰDMA<4D>жϴ<D0B6><CFB4><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief MT9V03X<33><58><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ж<EFBFBD>
|
||||
// @param NULL
|
||||
@@ -328,14 +355,7 @@ void mt9v03x_vsync(void)
|
||||
{
|
||||
CLEAR_GPIO_FLAG(MT9V03X_VSYNC_PIN);
|
||||
mt9v03x_dma_int_num = 0;
|
||||
if(mt9v03x_dma_init_flag)
|
||||
{
|
||||
mt9v03x_dma_init_flag = 0;
|
||||
IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH);
|
||||
link_list_num = eru_dma_init(MT9V03X_DMA_CH, GET_PORT_IN_ADDR(MT9V03X_DATA_PIN), camera_buffer_addr, MT9V03X_PCLK_PIN, RISING, MT9V03X_W*MT9V03X_H);
|
||||
dma_start(MT9V03X_DMA_CH);
|
||||
}
|
||||
else
|
||||
if(!mt9v03x_finish_flag)//<2F>鿴ͼ<E9BFB4><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>δʹ<CEB4><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʳ<EFBFBD>ͻ
|
||||
{
|
||||
if(1 == link_list_num)
|
||||
{
|
||||
@@ -343,10 +363,11 @@ void mt9v03x_vsync(void)
|
||||
DMA_SET_DESTINATION(MT9V03X_DMA_CH, camera_buffer_addr);
|
||||
}
|
||||
dma_start(MT9V03X_DMA_CH);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// @brief MT9V03X<33><58><EFBFBD><EFBFBD>ͷDMA<4D><41><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
// @param NULL
|
||||
@@ -357,25 +378,14 @@ void mt9v03x_vsync(void)
|
||||
void mt9v03x_dma(void)
|
||||
{
|
||||
CLEAR_DMA_FLAG(MT9V03X_DMA_CH);
|
||||
mt9v03x_dma_int_num++;
|
||||
|
||||
if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH))
|
||||
{//ͼ<><CDBC><EFBFBD>д<EFBFBD>λ
|
||||
mt9v03x_finish_flag = 0;
|
||||
dma_stop(MT9V03X_DMA_CH);
|
||||
IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH);
|
||||
mt9v03x_dma_init_flag = 1;
|
||||
}
|
||||
else
|
||||
if(mt9v03x_dma_int_num >= link_list_num)
|
||||
{
|
||||
mt9v03x_dma_int_num++;
|
||||
|
||||
if(mt9v03x_dma_int_num >= link_list_num)
|
||||
{
|
||||
//<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
mt9v03x_dma_int_num = 0;
|
||||
mt9v03x_finish_flag = 1;//һ<><D2BB>ͼ<EFBFBD><CDBC><EFBFBD>Ӳɼ<D3B2><C9BC><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ3.8MS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(50FPS<50><53>188*120<32>ֱ<EFBFBD><D6B1><EFBFBD>)
|
||||
dma_stop(MT9V03X_DMA_CH);
|
||||
}
|
||||
//<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
mt9v03x_dma_int_num = 0;
|
||||
mt9v03x_finish_flag = 1;//һ<><D2BB>ͼ<EFBFBD><CDBC><EFBFBD>Ӳɼ<D3B2><C9BC><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ3.8MS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(50FPS<50><53>188*120<32>ֱ<EFBFBD><D6B1><EFBFBD>)
|
||||
dma_stop(MT9V03X_DMA_CH);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,8 @@
|
||||
|
||||
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
#define MT9V03X_INIT_TIMEOUT 0x0080
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -76,6 +78,7 @@ typedef enum
|
||||
LR_OFFSET, //ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
UD_OFFSET, //ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GAIN, //ͼ<><CDBC>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PCLK_MODE,
|
||||
CONFIG_FINISH, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ռλ<D5BC><CEBB><EFBFBD><EFBFBD>
|
||||
|
||||
COLOR_GET_WHO_AM_I = 0xEF,
|
||||
|
||||
@@ -211,6 +211,10 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
|
||||
{
|
||||
enableInterrupts();//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>Ƕ<EFBFBD><C7B6>
|
||||
IfxAsclin_Asc_isrReceive(&uart3_handle);
|
||||
if(GPS_TAU1201 == gps_type)
|
||||
{
|
||||
gps_uart_callback();
|
||||
}
|
||||
}
|
||||
IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user