E32_433开发板程序
This commit is contained in:
292
Core/Src/e32_demo.c
Normal file
292
Core/Src/e32_demo.c
Normal file
@ -0,0 +1,292 @@
|
||||
#include "e32_demo.h"
|
||||
#include "main.h"
|
||||
#include "application.h"
|
||||
#include <string.h>
|
||||
|
||||
/**
|
||||
* ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
static e32_opt_buffer_t e32_buffer;
|
||||
|
||||
/**
|
||||
* ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡָ<C8A1><D6B8>
|
||||
*/
|
||||
static const uint8_t request_config[3]={0xC1,0xC1,0xC1};
|
||||
|
||||
/**
|
||||
* ATָ<54><D6B8> <20><>ȡ<EFBFBD>豸<EFBFBD><E8B1B8>
|
||||
*/
|
||||
static const char request_name[]="AT+DEVTYPE=?";
|
||||
|
||||
/**
|
||||
* ATָ<54><D6B8> <20><>ȡ<EFBFBD>̼<EFBFBD><CCBC>汾
|
||||
*/
|
||||
static const char request_version[]="AT+FWCODE=?";
|
||||
|
||||
/**
|
||||
* E32-433T30S Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
*/
|
||||
static const e32_register_t register_default =
|
||||
{
|
||||
.register_1 = {
|
||||
.address_h = 0x00,
|
||||
},
|
||||
.register_2 = {
|
||||
.address_l = 0x00,
|
||||
},
|
||||
.register_3.field = {
|
||||
.radio_rate = RADIO_RATE_2400,
|
||||
.uart_baud_rate = UART_RATE_9600,
|
||||
.uart_parity = UART_8N1,
|
||||
},
|
||||
.register_4 = {
|
||||
.channel = 0x17,
|
||||
},
|
||||
.register_5.field = {
|
||||
.tx_power = TX_POWER_DBM_30,
|
||||
.packet_fec = ON,
|
||||
.wake_on_radio_period = WOR_PERIOD_250MS,
|
||||
.reserve = OFF,
|
||||
.specify_target = OFF,
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief <20><>ģ<EFBFBD><C4A3>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
*
|
||||
* @param config <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
*/
|
||||
static void e32_send_config_command( const e32_register_t *config )
|
||||
{
|
||||
/* <20><>1<EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
C0<43><30><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
e32_buffer.hex_cmd.command = 0xC0;
|
||||
|
||||
/* <20><>2~6<>ֽڿ<D6BD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD> */
|
||||
memcpy( e32_buffer.hex_cmd.config , (uint8_t*)config , sizeof(e32_register_t));
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4> */
|
||||
e32_hal_uart_tx( (uint8_t*)&e32_buffer, sizeof(e32_register_t) + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><>ģ<EFBFBD><C4A3>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ѯָ<D1AF><D6B8>
|
||||
*
|
||||
* @param cmd <20><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
|
||||
*/
|
||||
static void e32_send_request_command( request_cmd_t cmd )
|
||||
{
|
||||
switch( cmd )
|
||||
{
|
||||
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD>ò<EFBFBD><C3B2><EFBFBD> */
|
||||
case REQUEST_CMD_CONFIG:
|
||||
e32_hal_uart_tx( (uint8_t*)request_config, sizeof(request_config));
|
||||
break;
|
||||
|
||||
/* <20><>ȡ<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD> */
|
||||
case REQUEST_CMD_NAME:
|
||||
e32_hal_uart_tx( (uint8_t*)request_name, strlen(request_name));
|
||||
break;
|
||||
|
||||
/* <20><>ȡ<EFBFBD>̼<EFBFBD><CCBC>汾 */
|
||||
case REQUEST_CMD_VERSION:
|
||||
e32_hal_uart_tx( (uint8_t*)request_version, strlen(request_version));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief (<28><>ѯָ<D1AF><D6B8><EFBFBD><EFBFBD>)ģ<><C4A3>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>
|
||||
*
|
||||
* @param cmd <20><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
|
||||
* @param buffer ָ<><D6B8>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>
|
||||
* @param length Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
* @return bool <20><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>true; <20><><EFBFBD><EFBFBD>false<73><65>
|
||||
*/
|
||||
static bool e32_response_command_check( request_cmd_t cmd , uint8_t *buffer , uint8_t length )
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
switch( cmd )
|
||||
{
|
||||
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD>ò<EFBFBD><C3B2><EFBFBD> */
|
||||
case REQUEST_CMD_CONFIG:
|
||||
|
||||
/* <20><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6<EFBFBD>ֽ<EFBFBD>*/
|
||||
if( length == 6 )
|
||||
{
|
||||
/* <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> ֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD>Ϊ0xC1 */
|
||||
if( buffer[0] == 0xC1)
|
||||
{
|
||||
ret = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
/* <20><>ȡ<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD> */
|
||||
case REQUEST_CMD_NAME:
|
||||
/* <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> */
|
||||
if( strncmp( "DEVTYPE=", (char*)buffer, 8) == 0 )
|
||||
{
|
||||
ret = true;
|
||||
}
|
||||
break;
|
||||
|
||||
/* <20><>ȡ<EFBFBD>̼<EFBFBD><CCBC>汾 */
|
||||
case REQUEST_CMD_VERSION:
|
||||
/* <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> */
|
||||
if( strncmp( "FWCODE=", (char*)buffer, 7) == 0 )
|
||||
{
|
||||
ret = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><>ģ<EFBFBD>鴮<EFBFBD><E9B4AE>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @note <20><>ע<EFBFBD><D7A2>ģ<EFBFBD>鹤<EFBFBD><E9B9A4>ģʽ
|
||||
* @param buffer ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>
|
||||
* @param length д<>볤<EFBFBD><EBB3A4>
|
||||
*/
|
||||
void e32_demo_transmit( uint8_t *buffer , uint16_t length )
|
||||
{
|
||||
/* <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4> */
|
||||
e32_hal_uart_tx( buffer, length);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief (<28><>ѡ) ʾ<><CABE><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD>ȡ<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
||||
*
|
||||
* @note ģ<><C4A3>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
* @param buffer ģ<><C4A3>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param length ģ<><C4A3>Ӧ<EFBFBD><EFBFBD>
|
||||
*/
|
||||
void e32_demo_read_device_name( char *buffer , uint8_t *length )
|
||||
{
|
||||
uint16_t opt_length;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>֧<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>9600<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
uart1_reconfig(9600);
|
||||
|
||||
/* <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
|
||||
e32_hal_work_mode( WORK_MODE_CONFIG_AND_SLEEP );
|
||||
|
||||
/* <20><><EFBFBD>Ͳ<EFBFBD>ѯָ<D1AF><D6B8> <20><>ȡ<EFBFBD>豸<EFBFBD><E8B1B8> */
|
||||
e32_send_request_command( REQUEST_CMD_NAME );
|
||||
|
||||
/* <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3>Ӧ<EFBFBD><D3A6> */
|
||||
uart1_wait_response_blocked( (uint8_t*)buffer , &opt_length );
|
||||
|
||||
/* Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> */
|
||||
if( e32_response_command_check( REQUEST_CMD_NAME, (uint8_t*)buffer , opt_length ) != true )
|
||||
{
|
||||
/* Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>ȷ */
|
||||
while(1);
|
||||
}
|
||||
|
||||
*length = opt_length;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief (<28><>ѡ) ʾ<><CABE><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD>ȡ<EFBFBD>豸<EFBFBD>̼<EFBFBD><CCBC>汾
|
||||
*
|
||||
* @note ģ<><C4A3>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
* @param buffer ģ<><C4A3>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param length ģ<><C4A3>Ӧ<EFBFBD><EFBFBD>
|
||||
*/
|
||||
void e32_demo_read_fireware_version( char *buffer , uint8_t *length )
|
||||
{
|
||||
uint16_t opt_length;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>֧<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>9600<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
uart1_reconfig(9600);
|
||||
|
||||
/* <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
|
||||
e32_hal_work_mode( WORK_MODE_CONFIG_AND_SLEEP );
|
||||
|
||||
/* <20><><EFBFBD>Ͳ<EFBFBD>ѯָ<D1AF><D6B8> <20><>ȡ<EFBFBD>豸<EFBFBD><E8B1B8> */
|
||||
e32_send_request_command( REQUEST_CMD_VERSION );
|
||||
|
||||
/* <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3>Ӧ<EFBFBD><D3A6> */
|
||||
uart1_wait_response_blocked( (uint8_t*)buffer , &opt_length );
|
||||
|
||||
/* Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> */
|
||||
if( e32_response_command_check( REQUEST_CMD_VERSION, (uint8_t*)buffer , opt_length ) != true )
|
||||
{
|
||||
/* Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>ȷ */
|
||||
while(1);
|
||||
}
|
||||
|
||||
*length = opt_length;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ʹ<><CAB9><EFBFBD><EFBFBD>ʾ<EFBFBD>˵<EFBFBD><CBB5>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
||||
*
|
||||
* @param config <20>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
*/
|
||||
void e32_demo_menu_config( menu_config_t *config )
|
||||
{
|
||||
uint16_t opt_length;
|
||||
e32_register_t register_write;
|
||||
transmit_power_t power_select;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϼĴ<CFBC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
memcpy( (uint8_t*)®ister_write , (uint8_t*)®ister_default , sizeof(e32_register_t) );
|
||||
/* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA> */
|
||||
switch( config->tx_power )
|
||||
{
|
||||
case 27:
|
||||
power_select = TX_POWER_DBM_27;
|
||||
break;
|
||||
|
||||
case 24:
|
||||
power_select = TX_POWER_DBM_24;
|
||||
break;
|
||||
|
||||
case 21:
|
||||
power_select = TX_POWER_DBM_21;
|
||||
break;
|
||||
|
||||
default:
|
||||
power_select = TX_POWER_DBM_30;
|
||||
break;
|
||||
}
|
||||
|
||||
/* <20><EFBFBD><DEB8>û<EFBFBD><C3BB><EFBFBD><EFBFBD>õIJ<C3B5><C4B2><EFBFBD> */
|
||||
register_write.register_5.field.tx_power = power_select; //<2F><><EFBFBD><EFBFBD>
|
||||
register_write.register_3.field.radio_rate = (radio_rate_t)config->rate_mode; //<2F><><EFBFBD><EFBFBD>
|
||||
register_write.register_4.channel = config->channel; //<2F>ŵ<EFBFBD>
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>֧<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>9600<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
uart1_reconfig(9600);
|
||||
|
||||
/* <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
|
||||
e32_hal_work_mode( WORK_MODE_CONFIG_AND_SLEEP );
|
||||
|
||||
/* <20><>ģ<EFBFBD>鴮<EFBFBD><E9B4AE>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
e32_send_config_command( ®ister_write );
|
||||
|
||||
/* <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3>Ӧ<EFBFBD><D3A6> */
|
||||
uart1_wait_response_blocked( e32_buffer.opt_buffer , &opt_length );
|
||||
|
||||
// /* Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> ָ<><D6B8>ͷ<EFBFBD><CDB7>ΪC1 */
|
||||
// if( e32_buffer.opt_buffer[0] != 0xC1 )
|
||||
// {
|
||||
// /* ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>FF FF FF <20><>ʾָ<CABE><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
// while(1);
|
||||
// }
|
||||
|
||||
///@todo <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/* <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><CDB8>ģʽ<C4A3><CABD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> */
|
||||
uart1_reconfig(9600);
|
||||
|
||||
/* <20>ص<EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
|
||||
e32_hal_work_mode( WORK_MODE_TRANSPARENT );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user