这段代码的含义就是把__io_putchar或者fputc函数重定义为HAL_UART_Transmit函数。 把这段代码放在最开头的位置 然后你就可以愉快的使用printf函数了。 cnt++;// 原先的格式化字符串就不需要了// sprintf(str,"cnt=%d\n",cnt);// HAL_UART_Transmit(&huart1,str,20,50);//通过usart1把str字符串发送出去...
HAL_UART_Transmit(&huart1,(uint8_t *)&ch, 1, 0xffff); //(huartx, 数组/数据, 大小,时间)修改huartx的值1,2,3 return ch; } int fgetc(FILE *f) { uint8_t ch = 0; HAL_UART_Receive(&huart1,&ch, 1, 0xffff); return ch; } //后面直接使用printf函数即可: printf("AnQi测试\r...
重定向需要完成三步: 初始化串口 包含stdio.h头文件 在keil中勾选使用C库 (Use MicroLIB) 重写fputc函数(以串口1为例) #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { HAL_UART_Trans...
包含stdio.h头文件 在keil中勾选使用C库 (Use MicroLIB) 重写fputc函数(以串口1为例) #ifdef__GNUC__#definePUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#definePUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endifPUTCHAR_PROTOTYPE{HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1,0xFFFF);...
HAL_UART_Transmit(&UartHandle,temp,1,2); //UartHandle是串口的句柄 } //重定向函数2 PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&UARTHandle, (uint8_t *)&ch, 1, 0xFFFF); return ch; } 在keil中勾选使用C库 之后就可以 使用printf()函数,像C语言一样输出打印信息,支持 %d %x 等一些格式输出。
对于STM32CubeIDE的用户来说,重定向printf到串口是常见的需求。实现这一功能通常涉及直接在putchar函数体内将字符发送出去,这在HAL库中可能需要使用阻塞模式的UART传输函数。然而,采用DMA辅助串口自动发送是一种更高效的方法,它允许在非阻塞模式下快速传输数据。这不仅提高了传输速度,还能确保程序在数据...
stm32串口输出重定向问题,一些小细节,调通之后需要注意的,记录一下。 一.首先要保证串口是联通的,就是使用HAL_UART_Transmit()函数发送数据时,串口助手是可以正常接收到的。 二.要在 UART_HandleTypeDef huart1; 之后 添加 #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) ...
STM32的HAL库开发系列 - 串口重定向打印函数 那既然有了printf,那么为什么还要自定义打印函数呢?因为当遇到多个串口都需要使用printf时就没有办法了,所以只能自己定义打印函数,让所有串口都能像使用printf函数一样做串口输出。 首先需要包含几个头文件: #include <string.h> ...
STM32单片机极简方法 使用宏定义 代替复杂的重定向printf()函数,实现串口打印。(HAL库例程)https://blog.csdn.net/wu10188/article/details/97786989 这个方式有助于编写好的工程。 stm32添加串口调试 https://blog.csdn.net/dream_feng/article/details/83504862按照这个方式,添加成功。
/// 重写_write,重定向到日志输出串口int_write(intfile,char*ch,intlen){HAL_UART_Transmit(&UART_LOG,(uint8_t*)ch,1,10);return1;} 如果你的波特率非常低,10ms都传不完一个字节,那就把HAL_UART_Transmit函数的最后一个参数(超时时间)改长一点。