/*
P0.06:串口发送TXD
P0.08:串口接收RXD
P0.05:串口RTS:发送请求,硬件流控开启时有效
P0.07:串口CTS:发送允许,硬件流控开启时有效
*/
#define RX_PIN_NUMBER 8
#define TX_PIN_NUMBER 6
#define CTS_PIN_NUMBER 7
#define RTS_PIN_NUMBER 5
#define UART_TX_BUF_SIZE 256 //串口发送缓存大小(字节数)
#define UART_RX_BUF_SIZE 256 //串口接收缓存大小(字节数)
//串口事件回调函数,该函数中判断事件类型并进行处理
void uart_error_handle(app_uart_evt_t * p_event)
{
//通讯错误事件
if (p_event->evt_type == APP_UART_COMMUNICATION_ERROR)
{
APP_ERROR_HANDLER(p_event->data.error_communication);
}
//FIFO错误事件
else if (p_event->evt_type == APP_UART_FIFO_ERROR)
{
APP_ERROR_HANDLER(p_event->data.error_code);
}
}
//串口配置
void uart_config(void)
{
uint32_t err_code;
//定义串口通讯参数配置结构体并初始化
const app_uart_comm_params_t comm_params =
{
RX_PIN_NUMBER,//定义uart接收引脚
TX_PIN_NUMBER,//定义uart发送引脚
RTS_PIN_NUMBER,//定义uart RTS引脚,流控关闭后虽然定义了RTS和CTS引脚,但是驱动程序会忽略,不会配置这两个引脚,两个引脚仍可作为IO使用
CTS_PIN_NUMBER,//定义uart CTS引脚
APP_UART_FLOW_CONTROL_DISABLED,//关闭uart硬件流控
false,//禁止奇偶检验
NRF_UART_BAUDRATE_115200//uart波特率设置为115200bps
};
//初始化串口,注册串口事件回调函数
APP_UART_FIFO_INIT(&comm_params,
UART_RX_BUF_SIZE,
UART_TX_BUF_SIZE,
uart_error_handle,
APP_IRQ_PRIORITY_LOWEST,
err_code);
APP_ERROR_CHECK(err_code);
}
static void uart_loopback_test()
{
while (true)
{
uint8_t cr;
while(app_uart_get(&cr) != NRF_SUCCESS);
while(app_uart_put(cr) != NRF_SUCCESS);
if (cr == 'q' || cr == 'Q')
{
printf(" \n\rExit!\n\r");
nrf_gpio_pin_toggle(17);
// while (true)
// {
// // Do nothing.
// }
}
}
}
int main(void)
{
LEDS_CONFIGURE(LEDS_MASK);
LEDS_OFF(LEDS_MASK);
uint32_t err_code;
const app_uart_comm_params_t comm_params =
{
RX_PIN_NUMBER,
TX_PIN_NUMBER,
RTS_PIN_NUMBER,
CTS_PIN_NUMBER,
APP_UART_FLOW_CONTROL_DISABLED,
false,
UART_BAUDRATE_BAUDRATE_Baud115200
};
APP_UART_FIFO_INIT(&comm_params,
UART_RX_BUF_SIZE,
UART_TX_BUF_SIZE,
uart_error_handle,
APP_IRQ_PRIORITY_LOW,
err_code);
APP_ERROR_CHECK(err_code);
nrf_gpio_cfg_output(17);
nrf_gpio_pin_clear(17);
while (1)
{
uart_loopback_test();
}
}