マイコンボードとRN42をUARTでつなげる
PCとRN42との接続が確認できたので、次はUARTでマイコンボードとRN42をつなげます。この時に注意したいのが、結線方法で、下図のようにクロスさせてTX,RXにつなげます。

マイコンボードはFRDM-K64Fを使用しますが、UARTの設定手順については、別記事で説明予定ですので、参考にしてください。今回はUART3をBluetooth通信用に設定しました。
メインのサンプルコードを下に載せました。UARTの設定手順でのサンプルコードからTEST_UARTをBT_UARTに差し替えただけですので、中身はほぼほぼ一緒です。
これはつまり、モジュールをつなげば、普通のUARTと同じようにプログラムするだけでイケルということです。
/*
FRDM-K64F RN42 sample
*/
#include "board.h"
#include "fsl_uart.h"
#include "pin_mux.h"
#include "clock_config.h"
//Function for Debug Console
#include "fsl_debug_console.h"
/*******************************************************************************
* Definitions
******************************************************************************/
/* UART instance and clock */
#define BT_UART UART3
#define BT_UART_CLKSRC UART3_CLK_SRC
#define BT_UART_CLK_FREQ CLOCK_GetFreq(UART3_CLK_SRC)
#define BT_UART_IRQn UART3_RX_TX_IRQn
#define BT_UART_IRQHandler UART3_RX_TX_IRQHandler
/* UART via Debug probe*/
#define DEBUG_UART UART0
#define DEBUG_CLKSRC UART0_CLK_SRC
#define DEBUG_CLK_FREQ CLOCK_GetFreq(UART0_CLK_SRC)
/*! @brief Ring buffer size (Unit: Byte). */
#define BUFFER_SIZE 16
/*******************************************************************************
* Prototypes
******************************************************************************/
/*******************************************************************************
* Variables
******************************************************************************/
uint8_t Title_String[] =
"SAMPLE PROGRAM FOR RN42 STARTS\r\n";
//UART Ring buffer for data receive
uint8_t ReadBuffer[BUFFER_SIZE];
volatile uint16_t txIndex; /* Index of the data to send out. */
volatile uint16_t rxIndex; /* Index of the memory to save new arrived data. */
//LPTMR counter
volatile uint32_t lptmrCounter = 0U;
//Signal from BT
uint8_t SigBT;
/*******************************************************************************
* Code
******************************************************************************/
/*!
* @brief FlexCAN Call Back function
*/
void BT_UART_IRQHandler(void)
{
uint8_t data;
/* If new data arrived. */
if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(BT_UART))
{
data = UART_ReadByte(BT_UART);
rxIndex++;
rxIndex %= BUFFER_SIZE;
ReadBuffer[rxIndex] = data;
}
#if defined __CORTEX_M && (__CORTEX_M == 4U)
__DSB();
#endif
}
/*!
* @brief Main function
*/
int main(void)
{
BOARD_InitPins();
BOARD_BootClockRUN();
// UART Parameters definition
uart_config_t config,debug_config;
// GET UART default values
UART_GetDefaultConfig(&config);
// Overwrite setting for UART
config.baudRate_Bps = BOARD_BT_UART_BAUDRATE;
config.enableTx = true;
config.enableRx = true;
memcpy(&debug_config,&config,sizeof(config));
debug_config.baudRate_Bps=BOARD_DEBUG_UART_BAUDRATE;
// UART Initialization
UART_Init(BT_UART, &config, BT_UART_CLK_FREQ);
UART_Init(DEBUG_UART, &debug_config,DEBUG_CLK_FREQ);
// Enable RX interrupt
UART_EnableInterrupts(BT_UART, kUART_RxDataRegFullInterruptEnable | kUART_RxOverrunInterruptEnable);
EnableIRQ(BT_UART_IRQn);
// Send firmware title out
UART_WriteBlocking(BT_UART, Title_String, sizeof(Title_String)-1);
while (1)
{
/* main loop */
while ((kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(BT_UART)) && (rxIndex != txIndex))
{
txIndex++;
txIndex %= BUFFER_SIZE;
UART_WriteByte(DEBUG_UART, ReadBuffer[txIndex]);
}
}
}
プログラム内で、UART3のボーレートを9600bpsに変更してあります。AE-RN-42ではボーレートをdefault値からの変更を有効にする際には、下のSW4をOnにしておきます。

通信した結果をTera Termで確認してみました。左がPCからの入力で、右がマイコンで受け取った結果になります。

以上で、無事Bluetoothが実現できました。
次は、ターミナルソフトではなく、Window上のアプリケーションから信号を送ってみたいと思います。
ページ: 1 2