串口Printf测试
一串口介绍
串口是一种应用十分广泛的通讯接口,可以实现两个设备的相互通讯。USART(通用同步异步收发器)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于 USART 还有一个UART,它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信
二串口硬件
ET6000一共有8个UART接口
这里使用UART1
IOC_ConfigStructInit(&Init);
Init.dir = GPIO_DIR_IN_OUT;
Init.mode = IOC_AF_MODE_1;
IOC_Config(IOC_PIN_GPIO3_5, &Init);//RXD
IOC_Config(IOC_PIN_GPIO3_4, &Init);//TXD
三串口结构体比较
前面的大体一样,后面的增加了FIFO的门槛值
四串口PRINTF使用方法
第一种方法:常用的方法,使用微库
直接增加fput函数
int fputc(int ch, FILE *f)
{
DRV_StatusTypeDef status;
UART_TransmitFIFO8BIT(UART1, (uint8_t*)&ch, 1, BLOCK_TRANSMIT_FIFO);
//// //wait Tx-FIFO sendout
status = UART_WaitTransmitDone(UART1, WAITDONE_TIMEOUT);
if(status != DRV_OK)
return ch;
}
第二种方法,不适用微库
增加函数
#if 1
#pragma import(__use_no_semihosting)
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc( int ch, FILE *f)
{
DRV_StatusTypeDef status;
UART_TransmitFIFO8BIT(UART1, (uint8_t*)&ch, 1, BLOCK_TRANSMIT_FIFO);
//// //wait Tx-FIFO sendout
status = UART_WaitTransmitDone(UART1, WAITDONE_TIMEOUT);
if(status != DRV_OK)
return ch;
}
#endif
五测试结果
引用: 秦天qintian0303 发表于 2024-11-2 23:11 翌创ETEB-6001串口速率可以达到多少?
手册里只标注了大于1M 没有测试过最大的