imx6ul+uart使用

本文介绍如何在Linux下使用串口通信,通过IMX6UL微处理器实现UART通信。示例代码包括串口初始化、发送和接收数据,以及设备的关闭。程序展示了非阻塞式的读写操作。
应用库第二弹:uart
串口通信大家肯定很熟悉了,但是linux上串口大家一定用的比较少吧,大多人在mpu的板子都是做一些数据处理,opencv之类的,都比较高大上。
写这一系列库就是可以让mpu板子和stm32一样玩;

程序主函数:
int main(int argc, char** argv)
{
    int dev_fd;
   
    if ((dev_fd = uart_init()) == -1) {
        printf("uart_init error\n");
        return -1;
    }   
    unsigned char data = 0;
    uart_send_buf(dev_fd, (unsigned char*)mesg_buf, strlen(mesg_buf));
    while (1) {
        if (uart_get_char(dev_fd, &data) > 0)
            uart_send_char(dev_fd, data);
        sleep(1);
        uart_send_char(dev_fd, 'C');
IMX6ULL处理器UART使用涉及多个方面,以下是从不同角度给出的使用指南及技术资料相关内容: ### 硬件连接与调试 在调试IMX6ULL新项目时,可配置UART1 - UART6,在arm下映射成ttymxc0 - ttymxc5。若遇到类似UART5只能发不能收的问题,可先短接RX和TX用minicom测试,若有异常,可配置成GPIO的方式调试,确认硬件连接是否正常。若硬件连接无问题但仍有异常,需结合datasheet和imx6ull - pinfunc.h检查是否是官方配置管脚寄存器的值有误[^1]。 ### 时钟要求 module_clock必须大于等于16倍波特率,module_clock经过Clock Gating & Divider之后变为ref_clk,ref_clk最终作为uart模块参考时钟。同时,UBMR和UBIR的值必须小于0xFFFF [^2]。 ### 参数计算与寄存器配置示例 以目标波特率115200,时钟源选择PLL3_80M(80MHz),分频系数1(RFDIV = 5,即1分频)为例: 参数计算得出:$\text{UBIR} = 71$,$\text{UBMR} = 3124$,代入公式$115200 = \frac{80000000}{3124 + 1} \times (71 + 1)$。 寄存器配置代码如下: ```c UART1_UFCR = (5 << 7); // RFDIV=5 UART1_UBIR = 71; UART1_UBMR = 3124; ``` ### 初始化代码示例(UART1) ```c // 1. 设置时钟源为PLL3_80M CCM_CSCDR1 &= ~(1 << 6); // UART_CLK_SEL=0 // 2. 配置引脚复用(以UART1为例) IOMUXC_SW_MUX_CTL_PAD_UART1_TX_DATA = 0x0; // TXD引脚配置 IOMUXC_SW_MUX_CTL_PAD_UART1_RX_DATA = 0x0; // RXD引脚配置 // 3. 软件复位 UART1_UCR2 |= (1 << 0); // SRST=1(复位) UART1_UCR2 &= ~(1 << 0); // SRST=0(退出复位) // 4. 配置波特率 UART1_UFCR = (5 << 7); // RFDIV=5(1分频) UART1_UBIR = 71; UART1_UBMR = 3124; // 5. 使能UART并配置数据格式 UART1_UCR1 |= (1 << 0); // UARTEN=1 UART1_UCR2 |= (1 << 1) | (1 << 2) | (1 << 5) | (1 << 6); // 8位数据,1停止位,无校验 UART1_UCR3 |= (1 << 2); // RXDMUXSEL=1 ``` ### 设备树添加示例(UART3) 若要使用UART3串口驱动并与压力传感器通讯,在设备树中添加UART3对应的设备节点的示例如下: ```dts // 在iomuxc中增加pinctrl节点,并保证两引脚没有被其他功能所占用 &iomuxc { pinctrl_uart3:uart3grp{ fsl,pins = < MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1 MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1 >; }; // 添加UART3对应的uart3节点 &uart3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart3>; status = "okay"; }; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值