nRF51822 UART引脚配置
UART引脚配置
和STM32不同,nRF51822没有固定的串口引脚RX和TX,与UART相关的信号RXD、CTS(Clear To Send)、RTS(Request To Send)和TXD可根据PSELRXD、PSELCTS、PSELRTS和PSELTXD寄存器的独立配置映射到相应的物理引脚。
nRF51822中与UART相关的寄存器如下图所示。
可见,为了使用nRF51822的UART,首先必须配置相应的引脚为UART的信号引脚,所幸的是,Nordic Semiconductor官方的SDK中已经给出了配置管脚映射的函数:simple_uart_config();该函数的源程序如下所示。
void simple_uart_config( uint8_t rts_pin_number,
uint8_t txd_pin_number,
uint8_t cts_pin_number,
uint8_t rxd_pin_number,
bool hwfc)
{
/** @snippet [Configure UART RX and TX pin] */
nrf_gpio_cfg_output(txd_pin_number);
nrf_gpio_cfg_input(rxd_pin_number, NRF_GPIO_PIN_NOPULL);
NRF_UART0->PSELTXD = txd_pin_number;
NRF_UART0->PSELRXD = rxd_pin_number;
/** @snippet [Configure UART RX and TX pin] */
if (hwfc)
{
nrf_gpio_cfg_output(rts_pin_number);
nrf_gpio_cfg_input(cts_pin_number, NRF_GPIO_PIN_NOPULL);
NRF_UART0->PSELCTS = cts_pin_number;
NRF_UART0->PSELRTS = rts_pin_number;
NRF_UART0->CONFIG = (UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos);
}
NRF_UART0->BAUDRATE = (UART_BAUDRATE_BAUDRATE_Baud38400 << UART_BAUDRATE_BAUDRATE_Pos);
NRF_UART0->ENABLE = (UART_ENABLE_ENABLE_Enabled << UART_ENABLE_ENABLE_Pos);
NRF_UART0->TASKS_STARTTX = 1;
NRF_UART0->TASKS_STARTRX = 1;
NRF_UART0->EVENTS_RXDRDY = 0;
}
下面对这段程序进行说明,程序的参数为RTS(Request To Send,请求发送)引脚号、TXD(数据发送信号线)引脚号、CTS(Clear To Send,发送允许)引脚号和RXD(数据接收信号线)引脚号。
UART引脚 | 名称 | 作用 | 方向 | 开发板中对应的引脚号 |
RTS | Request To Send | nRF51822向外部发出的请求发送信号,外部设备接到此请求信号后,开始发送数据,nRF51822通过RXD信号线接收数据(低电平有效) | 输出 | |
TXD | 输出 | P0.09 | ||
CTS | Clear To Send | 外部向nRF51822发送的发送允许信号,nRF51822接收到此信号后,开始发送数据,nRF51822通过TXD信号线开始发送数据(低电平有效) | 输入 | |
RXD | 输入 | P0.11 |
RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。
CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。
此处有人将CTS翻译为发送允许,我感觉的确比翻译为清除发送好。因为CTS是对方的RTS控制己方的CTS是否允许发送的功能。
源程序中在进行引脚映射的时候