下列代码是ST17H66的简易蓝牙通信代码 我现在要求你帮我写一下ST17H65的蓝牙收发 要求能连上手机蓝牙 并且告诉我怎么配置keil 以及选哪个芯片和库
/**************************************************************************************************
*******
**************************************************************************************************/
#include "bus_dev.h"
#include "gpio.h"
#include "clock.h"
#include "timer.h"
#include "jump_function.h"
#include "pwrmgr.h"
#include "mcu.h"
#include "gpio.h"
#include "log.h"
#include "rf_phy_driver.h"
#include "flash.h"
#include "version.h"
#include "watchdog.h"
#include "fs.h"
#define DEFAULT_UART_BAUD 115200
/*********************************************************************
LOCAL FUNCTION PROTOTYPES
*/
/*********************************************************************
EXTERNAL FUNCTIONS
*/
extern void init_config(void);
extern int app_main(void);
extern void hal_rom_boot_init(void);
/*********************************************************************
CONNECTION CONTEXT RELATE DEFINITION
*/
#define BLE_MAX_ALLOW_CONNECTION 1
#define BLE_MAX_ALLOW_PKT_PER_EVENT_TX 3
#define BLE_MAX_ALLOW_PKT_PER_EVENT_RX 3
#define BLE_PKT_VERSION BLE_PKT_VERSION_4_0 ///BLE_PKT_VERSION_5_1 //BLE_PKT_VERSION_5_1 //BLE_PKT_VERSION_5_1
/* BLE_MAX_ALLOW_PER_CONNECTION
{
...
struct ll_pkt_desc *tx_conn_desc[MAX_LL_BUF_LEN]; // new Tx data buffer
struct ll_pkt_desc *rx_conn_desc[MAX_LL_BUF_LEN];
struct ll_pkt_desc *tx_not_ack_pkt;
struct ll_pkt_desc *tx_ntrm_pkts[MAX_LL_BUF_LEN];
...
}
tx_conn_desc[] + tx_ntrm_pkts[] --> BLE_MAX_ALLOW_PKT_PER_EVENT_TX * BLE_PKT_BUF_SIZE*2
rx_conn_desc[] --> BLE_MAX_ALLOW_PKT_PER_EVENT_RX * BLE_PKT_BUF_SIZE
tx_not_ack_pkt --> 1*BLE_PKT_BUF_SIZE
*/
#define BLE_PKT_BUF_SIZE (((BLE_PKT_VERSION == BLE_PKT_VERSION_5_1) ? 1 : 0) * BLE_PKT51_LEN \
+ ((BLE_PKT_VERSION == BLE_PKT_VERSION_4_0) ? 1 : 0) * BLE_PKT40_LEN \
+ (sizeof(struct ll_pkt_desc) - 2))
#define BLE_MAX_ALLOW_PER_CONNECTION ( (BLE_MAX_ALLOW_PKT_PER_EVENT_TX * BLE_PKT_BUF_SIZE*2) \
+(BLE_MAX_ALLOW_PKT_PER_EVENT_RX * BLE_PKT_BUF_SIZE) \
+ BLE_PKT_BUF_SIZE )
#define BLE_CONN_BUF_SIZE (BLE_MAX_ALLOW_CONNECTION * BLE_MAX_ALLOW_PER_CONNECTION)
ALIGN4_U8 g_pConnectionBuffer[BLE_CONN_BUF_SIZE];
llConnState_t pConnContext[BLE_MAX_ALLOW_CONNECTION];
/*********************************************************************
CTE IQ SAMPLE BUF config
*/
//#define BLE_SUPPORT_CTE_IQ_SAMPLE TRUE
#ifdef BLE_SUPPORT_CTE_IQ_SAMPLE
uint16 g_llCteSampleI[LL_CTE_MAX_SUPP_LEN * LL_CTE_SUPP_LEN_UNIT];
uint16 g_llCteSampleQ[LL_CTE_MAX_SUPP_LEN * LL_CTE_SUPP_LEN_UNIT];
#endif
/*********************************************************************
OSAL LARGE HEAP CONFIG
*/
#define LARGE_HEAP_SIZE (4*1024)
ALIGN4_U8 g_largeHeap[LARGE_HEAP_SIZE];
/*********************************************************************
GLOBAL VARIABLES
*/
volatile uint8 g_clk32K_config;
volatile sysclk_t g_spif_clk_config;
/*********************************************************************
EXTERNAL VARIABLES
*/
extern uint32_t __initial_sp;
static void hal_low_power_io_init(void)
{
//========= pull all io to gnd by default
ioinit_cfg_t ioInit[]=
{
{GPIO_P02, GPIO_FLOATING },
{GPIO_P03, GPIO_FLOATING },
{GPIO_P07, GPIO_FLOATING },
{GPIO_P09, GPIO_PULL_UP },
{GPIO_P10, GPIO_PULL_UP },
{GPIO_P11, GPIO_FLOATING },
{GPIO_P14, GPIO_FLOATING },
{GPIO_P15, GPIO_FLOATING },
{GPIO_P18, GPIO_FLOATING },
{GPIO_P20, GPIO_FLOATING },
{GPIO_P34, GPIO_FLOATING },
#if(SDK_VER_CHIP==__DEF_CHIP_QFN32__)
{GPIO_P00, GPIO_FLOATING },
{GPIO_P01, GPIO_FLOATING },
{GPIO_P16, GPIO_FLOATING },
{GPIO_P17, GPIO_FLOATING },
{GPIO_P23, GPIO_FLOATING },
{GPIO_P24, GPIO_FLOATING },
{GPIO_P25, GPIO_FLOATING },
{GPIO_P26, GPIO_FLOATING },
{GPIO_P31, GPIO_FLOATING },
{GPIO_P32, GPIO_FLOATING },
{GPIO_P33, GPIO_FLOATING },
#endif
};
for(uint8_t i=0; i<sizeof(ioInit)/sizeof(ioinit_cfg_t); i++)
hal_gpio_pull_set(ioInit[i].pin,ioInit[i].type);
DCDC_CONFIG_SETTING(0x0a);
DCDC_REF_CLK_SETTING(1);
DIG_LDO_CURRENT_SETTING(0x01);
// hal_pwrmgr_RAM_retention(RET_SRAM0|RET_SRAM1|RET_SRAM2);
hal_pwrmgr_RAM_retention(RET_SRAM0);/// ?ù?Yêμ?êó|ó?£???éùsram
// hal_pwrmgr_RAM_retention(RET_SRAM0);
hal_pwrmgr_RAM_retention_set();
#if (SDK_VER_CHIP == __DEF_CHIP_QFN32__)
hal_pwrmgr_LowCurrentLdo_enable(); //// 17H65 ?a???éò???éù1|o?£? 17H662??ü?a??
#endif
}
static void ble_mem_init_config(void)
{
osal_mem_set_heap((osalMemHdr_t*)g_largeHeap, LARGE_HEAP_SIZE);
LL_InitConnectContext(pConnContext,
g_pConnectionBuffer,
BLE_MAX_ALLOW_CONNECTION,
BLE_MAX_ALLOW_PKT_PER_EVENT_TX,
BLE_MAX_ALLOW_PKT_PER_EVENT_RX,
BLE_PKT_VERSION);
#ifdef BLE_SUPPORT_CTE_IQ_SAMPLE
LL_EXT_Init_IQ_pBuff(g_llCteSampleI,g_llCteSampleQ);
#endif
}
static void hal_rfphy_init(void)
{
//Watchdog_Init(NULL);
//============config the txPower
g_rfPhyTxPower = RF_PHY_TX_POWER_0DBM ;
//============config BLE_PHY TYPE
g_rfPhyPktFmt = PKT_FMT_BLE1M;
//============config RF Frequency Offset
g_rfPhyFreqOffSet =RF_PHY_FREQ_FOFF_40KHZ;
//============config xtal 16M cap
XTAL16M_CAP_SETTING(0x09);
XTAL16M_CURRENT_SETTING(0x01);
hal_rc32k_clk_tracking_init();
hal_rom_boot_init();
NVIC_SetPriority((IRQn_Type)BB_IRQn, IRQ_PRIO_REALTIME);
NVIC_SetPriority((IRQn_Type)TIM1_IRQn, IRQ_PRIO_HIGH); //ll_EVT
NVIC_SetPriority((IRQn_Type)TIM2_IRQn, IRQ_PRIO_HIGH); //OSAL_TICK
NVIC_SetPriority((IRQn_Type)TIM4_IRQn, IRQ_PRIO_HIGH); //LL_EXA_ADV
//ble memory init and config
ble_mem_init_config();
}
static void hal_init(void)
{
hal_low_power_io_init();
clk_init(g_system_clk); //system init
hal_rtc_clock_config((CLK32K_e)g_clk32K_config);
hal_pwrmgr_init();
xflash_Ctx_t cfg =
{
.spif_ref_clk = SYS_CLK_RC_32M,
.rd_instr = XFRD_FCMD_READ_DUAL
};
hal_spif_cache_init(cfg);
LOG_INIT();
hal_gpio_init();
hal_fs_init(0x1103C000,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
#define FLASH_RfFreOffset_ADD 32
#define FLASH_RfFreBaseAddr 0x1103E000
static void rf_DTM_RX_rfoffset_calibration(void)
{
uint16 rxEstFoff;
uint16 rxPktNum;
uint8 rxEstRssi;
uint8 rxEstCarrSens;
uint8 rfFreqOffset_flash[64] = {0, 0, 0};
hal_gpio_pin_init(P10, IE);
hal_gpio_pull_set(P10, PULL_DOWN);
hal_flash_read(FLASH_RfFreBaseAddr, rfFreqOffset_flash, 64);
LOG("read data %x %x %x\n", rfFreqOffset_flash[FLASH_RfFreOffset_ADD], rfFreqOffset_flash[FLASH_RfFreOffset_ADD + 1], rfFreqOffset_flash[FLASH_RfFreOffset_ADD + 2]);
if(hal_gpio_read(P10) == 1){
while(1){
if(rfFreqOffset_flash[FLASH_RfFreOffset_ADD] != 0x55){
rf_phy_dtm_ext_rx_demod_burst(20, 0, 0x09, 37, 1000, 725, &rxEstFoff, &rxEstRssi, &rxEstCarrSens, &rxPktNum);
LOG("rxEsFoff= %d, rxPktNum=%d\n", rxEstFoff,rxPktNum);
if(rxPktNum != 0){
g_rfPhyFreqOffSet = (rxEstFoff-512)/20*5;
if(g_rfPhyFreqOffSet >= 0){
LOG("P Offset:%d\n", g_rfPhyFreqOffSet);
rfFreqOffset_flash[FLASH_RfFreOffset_ADD + 2] = 1;
rfFreqOffset_flash[FLASH_RfFreOffset_ADD + 1] = g_rfPhyFreqOffSet;
}else{
LOG("N offset:%d\n", ABS(g_rfPhyFreqOffSet));
rfFreqOffset_flash[FLASH_RfFreOffset_ADD + 2] = 2;
rfFreqOffset_flash[FLASH_RfFreOffset_ADD + 1] = ABS(g_rfPhyFreqOffSet);
}
rfFreqOffset_flash[FLASH_RfFreOffset_ADD] = 0x55;
hal_flash_erase_sector(FLASH_RfFreBaseAddr);
WaitMs(10);
hal_flash_write(FLASH_RfFreBaseAddr, rfFreqOffset_flash, 64);
hal_gpio_fmux(P10, Bit_DISABLE);
hal_gpio_pin_init(P10, OEN);
hal_gpio_write(P10, 0);
hal_flash_read(FLASH_RfFreBaseAddr + FLASH_RfFreOffset_ADD, rfFreqOffset_flash + FLASH_RfFreOffset_ADD, 1);
}
}else{
hal_gpio_fmux(P10, Bit_DISABLE);
hal_gpio_pin_init(P10, OEN);
hal_gpio_write(P10, 0);
}
}
}
if(rfFreqOffset_flash[FLASH_RfFreOffset_ADD] == 0x55){
if(rfFreqOffset_flash[FLASH_RfFreOffset_ADD + 2] == 1){
g_rfPhyFreqOffSet = rfFreqOffset_flash[FLASH_RfFreOffset_ADD + 1];
LOG("reserved freqoffset : %d\n", g_rfPhyFreqOffSet);
}else if(rfFreqOffset_flash[FLASH_RfFreOffset_ADD + 2] == 2){
g_rfPhyFreqOffSet = -rfFreqOffset_flash[FLASH_RfFreOffset_ADD + 1];
// LOG("reserved freqoffset : %d\n", ABS(g_rfPhyFreqOffSet));
LOG("reserved freqoffset : %d\n", g_rfPhyFreqOffSet);
}else{
g_rfPhyFreqOffSet = RF_PHY_FREQ_FOFF_40KHZ;
LOG("reserved data err\n");
}
}else{
g_rfPhyFreqOffSet = RF_PHY_FREQ_FOFF_40KHZ;
LOG("no DTM data,default offset is +40KHz\n");
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
int main(void)
{
watchdog_config(WDG_2S);
g_system_clk = SYS_CLK_XTAL_16M;//SYS_CLK_DBL_32M;//SYS_CLK_XTAL_16M;//SYS_CLK_DLL_64M;
g_clk32K_config = CLK_32K_RCOSC;//CLK_32K_XTAL;//CLK_32K_XTAL,CLK_32K_RCOSC
#if(FLASH_PROTECT_FEATURE == 1)
hal_flash_lock();
#endif
drv_irq_init();
init_config();
extern void ll_patch_slave(void);
ll_patch_slave();
hal_rfphy_init();
hal_init();
// rf_DTM_RX_rfoffset_calibration();
#if 0
if(hal_gpio_read(P20)==1)
rf_phy_direct_test();
#endif
LOG("SDK Version ID %08x \n",SDK_VER_RELEASE_ID);
LOG("rfClk %d rcClk %d sysClk %d tpCap[%02x %02x]\n",g_rfPhyClkSel,g_clk32K_config,g_system_clk,g_rfPhyTpCal0,g_rfPhyTpCal1);
LOG("sizeof(struct ll_pkt_desc) = %d, buf size = %d\n", sizeof(struct ll_pkt_desc), BLE_CONN_BUF_SIZE);
LOG("sizeof(g_pConnectionBuffer) = %d, sizeof(pConnContext) = %d, sizeof(largeHeap)=%d \n",\
sizeof(g_pConnectionBuffer), sizeof(pConnContext),sizeof(g_largeHeap));
LOG("[REST CAUSE] %d\n ",g_system_reset_cause);
app_main();
}
///////////////////////////////////// end ///////////////////////////////////////
最新发布