目录
一.背景
二.实现
UCR2寄存器
UCR3寄存器
UFCR寄存器
UBIR与UBMR寄存器
USR2寄存器
UTXD寄存器
URXD寄存器
通信
一.背景
CH340C:TTL电平转USB电平
DCDC芯片:隔离作用,防止CH340C芯片受到干扰,左侧为输入引脚,右侧为输出引脚,交叉连接,显然为DTE。
右侧输出端接4.7k下拉电阻,本次只需配置输入即可。
要配置输入引脚UART1 RXD和UART1 TXD,配置复用功能为串口收和发。同时电气属性配置默认值,能驱动串口即可。
// 配置串口引脚功能 IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX, 0); IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX, 0); // 配置串口引脚电气属性 IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX, 0x10B0); IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX, 0x10B0);DTE设备:数据发到这就结束,交叉连接
DCE设备:不用数据,接收之后就发送,作为数据的中转站,收接收,发接发,直连
流控:
二.实现
UCR2寄存器
UCR3寄存器
UFCR寄存器
RefFreq为80MHZ,BaudRate比特率为11520,计算出UBMR与UBIR不唯一,符合条件即可
UBIR与UBMR寄存器
紫线为PLL3引脚,480MHZ,经过静态分频,除以6得到80MHZ
// 设置115200波特率 UART1->UBIR = 999; UART1->UBMR = 43402;最后
// 使能UART UART1->UCR1 |= (1 << 0);USR2寄存器
UTXD寄存器
void putc(unsigned char ch) { while ((UART1->USR2 & (1 << 3)) == 0); UART1->UTXD = ch; } void puts(const char *p) { while(*p) { putc(*p++); } }URXD寄存器
unsigned char getc(void) { while((UART1->USR2&(1 << 0))==0); return UART1->URXD & 0xFF; }通信
输入A带\n则会读取\n为error
最后,导入stdio库函数,使用scanf和printf。
在用VOFA软件通信时,Windows给imx6ull发送数据时,imx6ull调用scanf函数进行回显,在VOFA中就显示了scanf的值
//main函数中 while (1) { scanf("%d %d",&a,&b); //imx6ull发给windows,scanf回显给VOFA终端 printf("%d + %d = %d\n",a,b,a+b); }