常见泽1 发表于 2024-11-2 15:10

【翌创ETEB-6001DPX测评】第二篇 USART打印

<p align="center"><b>串口</b><b>Printf</b><b>测试</b></p>

<p >&nbsp;</p>

<p ><b>一串口介绍</b></p>

<p >串口是一种应用十分广泛的通讯接口,可以实现两个设备的相互通讯。USART(通用同步异步收发器)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于 USART 还有一个UART,它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p ><b>二串口硬件</b></p>

<p >ET6000一共有8个UART接口</p>

<p > &nbsp;</p>

<p >这里使用UART1</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p ><b>&nbsp; </b>&nbsp;&nbsp;IOC_ConfigStructInit(&amp;Init);</p>

<p >&nbsp;&nbsp;&nbsp; Init.dir = GPIO_DIR_IN_OUT;</p>

<p >&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp; Init.mode = IOC_AF_MODE_1;</p>

<p >&nbsp;&nbsp;&nbsp; IOC_Config(IOC_PIN_GPIO3_5, &amp;Init);//RXD</p>

<p >&nbsp;&nbsp;&nbsp; IOC_Config(IOC_PIN_GPIO3_4, &amp;Init);//TXD</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p ><b>三串口结构体比较</b></p>

<p >&nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p > &nbsp;</p>

<p >前面的大体一样,后面的增加了FIFO的门槛值</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p ><b>四串口</b><b>PRINTF</b><b>使用方法</b></p>

<p >&nbsp;</p>

<p >第一种方法:常用的方法,使用微库</p>

<p >&nbsp;</p>

<p > &nbsp;</p>

<p >直接增加fput函数</p>

<p >int fputc(int ch, FILE *f)</p>

<p >{</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;DRV_StatusTypeDef status;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp; UART_TransmitFIFO8BIT(UART1, (uint8_t*)&amp;ch, 1, BLOCK_TRANSMIT_FIFO);</p>

<p >////&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //wait Tx-FIFO sendout</p>

<p >&nbsp;&nbsp; status = UART_WaitTransmitDone(UART1, WAITDONE_TIMEOUT);</p>

<p >&nbsp;&nbsp;&nbsp; if(status != DRV_OK)</p>

<p >&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp; return ch;</p>

<p >}</p>

<p >&nbsp;</p>

<p >第二种方法,不适用微库</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >增加函数</p>

<p >#if 1</p>

<p >#pragma import(__use_no_semihosting)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >struct __FILE</p>

<p >{</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int handle;</p>

<p >&nbsp;</p>

<p >};</p>

<p >&nbsp;</p>

<p >FILE __stdout;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >//定义_sys_exit()以避免使用半主机模式&nbsp;&nbsp;&nbsp;</p>

<p >void _sys_exit(int x)</p>

<p >{</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x = x;</p>

<p >}</p>

<p >//重定义fputc函数</p>

<p >int fputc( int ch, FILE *f)</p>

<p >{</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;DRV_StatusTypeDef status;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp; UART_TransmitFIFO8BIT(UART1, (uint8_t*)&amp;ch, 1, BLOCK_TRANSMIT_FIFO);</p>

<p >////&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //wait Tx-FIFO sendout</p>

<p >&nbsp;&nbsp; status = UART_WaitTransmitDone(UART1, WAITDONE_TIMEOUT);</p>

<p >&nbsp;&nbsp;&nbsp; if(status != DRV_OK)</p>

<p >&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp; return ch;</p>

<p >}</p>

<p >#endif</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p ><b>五测试结果</b></p>

<p > &nbsp;</p>

秦天qintian0303 发表于 2024-11-2 23:11

<p>翌创ETEB-6001串口速率可以达到多少?&nbsp;&nbsp;</p>

常见泽1 发表于 2024-11-2 23:53

秦天qintian0303 发表于 2024-11-2 23:11
翌创ETEB-6001串口速率可以达到多少?&nbsp;&nbsp;

<p>手册里只标注了大于1M 没有测试过最大的</p>
页: [1]
查看完整版本: 【翌创ETEB-6001DPX测评】第二篇 USART打印