思澈科技软件开发工具包  2.20
UART

UART驱动包括两层:硬件访问层(HAL)和RT-Thread的适配层。
硬件访问层提供用于访问 UART 外设寄存器的基本 API。 有关详细信息,请参阅 UART HAL 的 API 文档。
适配层提供对 RT-Thread 驱动框架的支持。 用户可以使用 RT-Thread POSIX 驱动程序接口进行 UART 编程。 请参阅 RT-Thread 驱动程序的 API 文档。
主要功能包括:

  • 多实例支持
  • 支持UART波特率高达3Mbps
  • 支持偶/奇/无奇偶校验,5/6/7/8/位数,1/2停止位
    如果奇偶校验为奇偶校验,位数为8,芯片组需要设置为9 位,即使用第9 位作为奇偶校验
  • 支持基于中断的 RX 和 TX
  • RX 和 TX 均支持 DMA

驱动配置

UART 驱动程序可以使用 UART 外设的多个实例。 可以使用 menuconfig 工具为每个项目选择外设和 DMA 支持配置的实例,通常保存在 C 头文件中。 默认情况下,配置保存为 rtconfig.h。

以下示例显示了在一个项目头文件中定义的标志,该项目正在使用具有 RX DMA 支持的 uart1 和 uart2 实例:

#define BSP_USING_UART
#define BSP_USING_UART1
#define BSP_UART1_RX_USING_DMA
#define BSP_USING_UART2
#define BSP_UART2_RX_USING_DMA

配置完成后,用户需要在所有需要访问驱动程序的源代码中包含头文件。

使用UART驱动

适配器层注册 RT-Thread 请求的硬件支持功能,并使用 HAL 实现这些功能。 UART HAL 公开的API 详见 UART 。 对于使用 RT-Thread 的用户,可以使用以下代码作为示例:

// Find and open device
rt_device_t uart_dev = rt_device_find("uart1");
rt_err_t err = rt_device_open(uart_dev, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_DMA_RX);
// Configure UART
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
config.baudrate=115200;
rt_device_control(uart_dev, RT_DEVICE_CTRL_CONFIG, &config);
// TX
uint8_t data=[1,2,3,4,5,6,7,8];
rt_device_write(uart_dev,
-1, // Start offset, for UART, this is ignored.
data,
sizeof(data));
// RX
#define BLOCK_SIZE 256
uint8_t g_rx_data=[BLOCK_SIZE];
static rt_sem_t rx_sem;
// Interrupt callback, try not issue read in interrupt context.
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
{
rt_sem_release(rx_sem);
return RT_EOK;
}
...
// Create semphore to communicate with IRQ context
rt_sem_create("uart_sem", 1, RT_IPC_FLAG_FIFO);
// Set RX indication functions
rt_device_set_rx_indicate(uart_dev, uart_input);
// Wait fo RX interrupt.
rt_sem_take(rx_sem, 1000);
// Read up to BLOCK_SIZE, will return len actually read.
int len=rt_device_read(uart_dev,
-1,
g_rx_data,
BLOCK_SIZE);
Note
DMA 支持是通过 menuconfig 工具配置的,要使用 DMA,开发者需要在打开设备时设置相应的标志。
len
uint16_t len
Definition: bf0_ble_ancs.h:226
data
uint8_t data[]
Definition: bf0_ble_ancs.h:227