配合《IMXRT1050RM》第 39 章 LPUART 章节一起食用
两个通讯设备的“DB9 接口”之间通过串口信号线建立起连接
RS-232 电平标准的信号不能直接被控制器直接识别
因为控制器一般使用 TTL 电平标准,所以常常会使用 MA3232 芯片对 TTL 及 RS-232 电平的信号进行互相转换。
RT1052 芯片具有多达 8 个 LPUART 外设用于串口通讯。
UART 是在 USART 基础上裁剪掉了同步通信功能,只支持异步通信。
UART 满足外部设备对工业标准 NRZ 异步串行数据格式的要求
串口发送
串口接收
UART 初始化结构体 (fsl_lpuart.h)
1 typedef struct _lpuart_config {
2 uint32_t baudRate_Bps; // 波特率
3
4 /* 奇偶校验方式,无校验(默认值),奇校验,偶校验 */
5
6 lpuart_parity_mode_t parityMode;
7 /* 数据位位数 , 8 位 ( 默认值 ),7 位 */
8 lpuart_data_bits_t dataBitsCount;
9 bool isMsb; // 数据位顺序 , LSB ( 默认值 ) ,MSB
10
11 /* 如果两位长停止位是可用的并且 */
12 #if defined(FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT) &&
13 FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT
14 /* 停止位 ,1 位 ( 默认值 ),2 位 */
15 lpuart_stop_bit_count_t stopBitCount;
16 #endif
17
18 /*
19 发送接收 FIFO 的容量 ( 条目数 )FSL_FEATURE_LPUART_HAS_FIFO 为真,
20 则表示 FIFO 条目数不为零
21 */
22 #if defined(FSL_FEATURE_LPUART_HAS_FIFO) &&
23 FSL_FEATURE_LPUART_HAS_FIFO
24 uint8_t txFifoWatermark; //TX FIFO watermark 接收 FIFO 数量
25 uint8_t rxFifoWatermark; //RX FIFO watermark 发送 FIFO 数量
26 #endif
27 /* 如果支持硬件流控 */
28 #if defined(FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT) &&
29 FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT
30 bool enableRxRTS; // 使能接收硬件流控
31 bool enableTxCTS; // 使能发送硬件流控
32 /*
33 发送硬件流控信号源,串口的 CTS 引脚或者其他外部 I/O
34 */
35 lpuart_transmit_cts_source_t txCtsSource;
36 /* LPUART 获取 CTS 硬件流控状态配置 */
37 lpuart_transmit_cts_config_t txCtsConfig;
38 #endif
39 /* 空闲计数开始位置定义 . */
40 lpuart_idle_type_select_t rxIdleType;
41 /* 空载字符数量定义 */
42 lpuart_idle_config_t rxIdleConfig;
43 bool enableTx; // 使能发送 TX
44 bool enableRx; // 使能接收 RX
45 } lpuart_config_t;
波特率设置。一般设置为 2400、9600、19200、115200。SDK 库函数会根据设定值完成具体寄存器的设置。
校验方式选择:可选奇校验、偶校验、无校验。默认选择无校验。
数据帧字长,可选 8 位或 7 位。一般使用 8 数据位;默认是 8 位数据位。
数据位顺序,MSB 表示先发送高位,LSB 表示先发送低位。默认是 LSB 模式,isMsb为 0。
代码第 13 行:条件编译,判断是否支持长停止位,默认是支持的。所以 #if 与 #endif 之间的代码会被编译进工程。
代码第 23 行:条件编译,系统默认 FSL_FEATURE_LPUART_HAS_FIFO(用于定义是否使
用接收发送缓存)默认值为 1。#if 与 #endif 之间的代码会被编译进工程。
txFifoWatermark:发送 FIFO 数量,默认为 0。
rxFifoWatermark:接收 FIFO 数量,默认为 0。
代码第 29 行:条件编译,判断系统是否支持硬件控制流。默认是支持的。
txCtsSource:发送硬件流控信号源,选择使用外部 I/O 引脚还是串口默认的 CTS 引脚。
txCtsConfig:CTS 硬件流控状态配置。
rxIdleType:空闲计数开始位置定义,空闲计数从一个有效的起始位开始计数,或者在结束
位之后开始计数。
rxIdleConfig:空载字符数量定义,当串口收到一定数量的空载字符(由 rxIdleConfig 指定数
量)设置串口的接口空闲标志。
enableTx:使能发送。
enableRx:使能接收。
CH340G 是一个 USB 总线的转接芯片,实现 USB 转 UART、USB 转 IrDA 红外或者 USB 转打印机接口
(1) 使能串口的接收和发送功能;
(2) 初始化 GPIO,并将 GPIO 复用到 UART 上;
(3) 配置 UART 参数;
(4) 配置中断控制器并使能 USART 接收中断;
(5) 在 UART 接收中断服务函数实现数据接收和发送
1 /*********************************************************
2 * UART1 GPIO 端口、引脚号及 IOMUXC 复用宏定义
3 *********************************************************/
4 #define UART_RX_GPIO GPIO1
5 #define UART_RX_GPIO_PIN (13U)
6 #define UART_RX_IOMUXC IOMUXC_GPIO_AD_B0_13_LPUART1_RX
7
8 #define UART_TX_GPIO GPIO1
9 #define UART_TX_GPIO_PIN (12U)
10 #define UART_TX_IOMUXC IOMUXC_GPIO_AD_B0_12_LPUART1_TX
11
12 /*******************************************
13 * UART1 串口号、中断服务函数、中断号重定义
14 ********************************************/
15
16 #define DEBUG_UARTx LPUART1
17 #define DEBUG_UART_IRQ LPUART1_IRQn
18 #define DEBUG_UART_IRQHandler LPUART1_IRQHandler
19
20 /***********************************************
21 * UART1 串口配置参数定义,默认参数如下 :
22 *****************************************/
23 #define DEBUG_UART_BAUDRATE 115200U
24 #define DEBUG_UART_STOP_BIT kLPUART_OneStopBit
25 #define DEBUG_UART_ENABLE_SEND true
26 #define DEBUG_UART_ENABLE_RESIVE true
27
28 /********************************
29 * uart 引脚配置
30 **********************************/
31 #define UART_RX_PAD_CONFIG_DATA (SRE_0_SLOW_SLEW_RATE| \
32 DSE_6_R0_6| \
33 SPEED_1_MEDIUM_100MHz| \
34 ODE_0_OPEN_DRAIN_DISABLED| \
35 PKE_1_PULL_KEEPER_ENABLED| \
36 PUE_1_PULL_SELECTED| \
37 PUS_3_22K_OHM_PULL_UP| \
38 HYS_0_HYSTERESIS_DISABLED)
39 /* 配置说明 : */
40 /* 转换速率 : 转换速率慢
41 驱动强度 : R0/6
42 带宽配置 : medium(100MHz)
43 开漏配置 : 关闭
44 拉 / 保持器配置 : 使能
45 拉 / 保持器选择 : 上下拉
46 上拉 / 下拉选择 : 22K 欧姆上拉 ( 选择了保持器此配置无
47 效 )
48 滞回器配置 : 禁止 */
50 #define UART_TX_PAD_CONFIG_DATA (SRE_0_SLOW_SLEW_RATE| \
51 DSE_6_R0_6| \
52 SPEED_1_MEDIUM_100MHz| \
53 ODE_0_OPEN_DRAIN_DISABLED| \
54 PKE_1_PULL_KEEPER_ENABLED| \
55 PUE_0_KEEPER_SELECTED| \
56 PUS_3_22K_OHM_PULL_UP| \
57 HYS_0_HYSTERESIS_DISABLED)
58 /* 配置说明 : */
59 /* 转换速率 : 转换速率慢
60 驱动强度 : R0/6
61 带宽配置 : medium(100MHz)
62 开漏配置 : 关闭
63 拉 / 保持器配置 : 使能
64 拉 / 保持器选择 : 保持器
65 上拉 / 下拉选择 : 22K 欧姆上拉 ( 选择了保持器此配置无效 )
66 滞回器配置 : 禁止 */
1 /**
2 * @brief 初始化 uart 相关 IOMUXC 的 PAD 属性配置
3 * @param 无
4 * @retval 无
5 */
6 void UART_IOMUXC_PAD_Config(void)
7 {
8 IOMUXC_SetPinConfig(UART_RX_IOMUXC, UART_RX_PAD_CONFIG_DATA);
9 IOMUXC_SetPinConfig(UART_TX_IOMUXC, UART_TX_PAD_CONFIG_DATA);
10 }
11
12 /**
13 * @brief 初始化 uart 引脚功能
14 * @param 无
15 * @retval 无
16 */
17 void UART_IOMUXC_MUX_Config(void)
18 {
19 /* RX 和 TX 引脚 */
20 IOMUXC_SetPinMux(UART_RX_IOMUXC, 0U);
21 IOMUXC_SetPinMux(UART_TX_IOMUXC, 0U);
22 }
23
24 /**
25 * @brief 初始化 uart 配置参数
26 * @param 无
27 * @retval 无
28 */
29 void UART_ModeConfig(void)
30 {
31 /* 定义串口配置参数结构体变量,
32 用于保存串口的配置信息 */
33 lpuart_config_t config;
34
35 /* 调用固件库函数得到默认的串口配置参数,
36 在默认的配置参数基础上修改 */
37 LPUART_GetDefaultConfig(&config);
38 config.baudRate_Bps = DEBUG_UART_BAUDRATE;// 波特率
39 // 是否允许接收数据
40 config.enableRx = DEBUG_UART_ENABLE_RESIVE;
41 // 是否允许发送数据
42 config.enableTx = DEBUG_UART_ENABLE_SEND;
43
44 /* 调用固件库函数,
45 将修改好的配置信息写入到串口的配置寄存器中 */
46 LPUART_Init(DEBUG_UARTx, &config, BOARD_DEBUG_UART_CLK_FREQ);
47
48 /* 允许接收中断 */
49 LPUART_EnableInterrupts(DEBUG_UARTx, \
50 kLPUART_RxDataRegFullInterruptEnable);
51 EnableIRQ(DEBUG_UART_IRQ);
52
53 }
54
55 /**
56 * @brief 初始化 uart, 并开启了收发功能
57 * @param 无
58 * @retval 无
59 */
60 void UART_Config(void)
61 {
62 USART_IOMUXC_MUX_Config();
63 USART_IOMUXC_PAD_Config();
64 USART_ModeConfig();
65 }