×
嵌入式 > 技术百科 > 详情

NRF51822之使用外部32Mhz晶振

发布时间:2024-05-17 发布时间:
|

硬件平台为微雪BLE400的(将原来的16mhz晶振改为32mhz。两个旁电容改为22pf)

以nRF51_SDK_10.0.0_dc26b5eexamplesble_peripheralble_app_uart项目为例

在main.c中进行修改


#if defined( USB_SYSTEM_CLOCK_32MHZ)

#define DEVICE_NAME "Nordic_UART_32mhz" /**< Name of device. Will be included in the advertising data. */

#else

#define DEVICE_NAME "Nordic_UART" /**< Name of device. Will be included in the advertising data. */

#endif//USB_SYSTEM_CLOCK_32MHZ


#if defined (USB_SYSTEM_CLOCK_32MHZ)

/**@brief Function for Set the external high frequency clock source to 32 MHz .

*/

static void setClock( void )

{

// Set the external high frequency clock source to 32 MHz

NRF_CLOCK->XTALFREQ = 0xFFFFFF00;

// Start the external high frequency crystal

NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;

NRF_CLOCK->TASKS_HFCLKSTART = 1;

// Wait for the external oscillator to start up

while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0) {}

}

#endif//USB_SYSTEM_CLOCK_32MHZ


/**@brief Application main function.

*/

int main(void)

{

uint32_t err_code;

bool erase_bonds;

uint8_t start_string[] = START_STRING;

#if defined (USB_SYSTEM_CLOCK_32MHZ)

setClock();

#endif//USB_SYSTEM_CLOCK_32MHZ



// Initialize.

APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_OP_QUEUE_SIZE, false);

uart_init();

buttons_leds_init(&erase_bonds);

ble_stack_init();

gap_params_init();

services_init();

advertising_init();

conn_params_init();

printf("%s",start_string);


err_code = ble_advertising_start(BLE_ADV_MODE_FAST);

APP_ERROR_CHECK(err_code);

// Enter main loop.

for (;;)

{

power_manage();

}

}

修改system_nrf51.C

#if defined( USB_SYSTEM_CLOCK_32MHZ)

#define __SYSTEM_CLOCK (32000000UL) /*!< nRF51 devices use a fixed System Clock Frequency of 32MHz */

#else

#define __SYSTEM_CLOCK (16000000UL) /*!< nRF51 devices use a fixed System Clock Frequency of 16MHz */

#endif//USB_SYSTEM_CLOCK_32MHZ


后面的测试的步骤和16mhz步骤相同。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题