这段代码的含义就是把__io_putchar或者fputc函数重定义为HAL_UART_Transmit函数。 把这段代码放在最开头的位置 然后你就可以愉快的使用printf函数了。 cnt++;// 原先的格式化字符串就不需要了// sprintf(str,"cnt=%d\n",cnt);// HAL_UART_Transmit(&huart1,str,20,50);//通过usart1把str字符串发送出去...
重定向需要完成三步: 初始化串口 包含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...
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...
int fputc(int c, FILE * f) { ch=c; HAL_UART_Transmit(&huart1,&ch,1,1000);//发送串口,不同的单片机函数和串口命名不同,替换对于的函数串口名字即可实现不同库和不同单片机的重定向了 return c; } //重定向scanf函数到串口 意思就是说接受串口发过来的数据 /*fgetc*/ int fgetc(FILE * F) {...
我们可以利用sprintf()的特点把要显示的内容转换成字符串,存到一个预先定义好的字符数组中,然后再用HAL库串口发送函数,把该字符数组内的信息发出去,发送的个数就是sprintf()的返回值: 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 uint8_tUSART_TX_BUF[200];//发送缓冲数组,最大200字节#defin...
三、将项目文件夹中CMakeLists.txt 52行,56行按照现有格式将源文件目录包含进去; 四、创建retarget.h/c文件,使用tools-->CMake-->Reload CMake Project更新文件; retarget.h #ifndef _RETARGET_H__ #define _RETARGET_H__ #include"stm32f1xx_hal.h"#include<sys/stat.h>#include<stdio.h>voidRetargetIn...
stm32串口输出重定向问题,一些小细节,调通之后需要注意的,记录一下。 一.首先要保证串口是联通的,就是使用HAL_UART_Transmit()函数发送数据时,串口助手是可以正常接收到的。 二.要在 UART_HandleTypeDef huart1; 之后 添加 #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) ...
三、将项目文件夹中CMakeLists.txt 52行,56行按照现有格式将源文件目录包含进去; 四、创建retarget.h/c文件,使用tools-->CMake-->Reload CMake Project更新文件; retarget.h #ifndef _RETARGET_H__ #define _RETARGET_H__ #include"stm32f1xx_hal.h"#include<sys/stat.h>#include<stdio.h>voidRetargetIn...
重新实现fputc函数,编写代码将这个字符通过串口发送,因为发送每个字符时都会调用该函数,所以为了效率,不再调用库函数 HAL_UART_Transmit 发送,而是直接操作寄存器发送。 检测串口当前状态 STM32L431的USART串口外设有一个 ISR 寄存器,全名 Interrupt and status register, 用来指示当前串口的状态,如图: ...
重新实现fputc函数,编写代码将这个字符通过串口发送,因为发送每个字符时都会调用该函数,所以为了效率,不再调用库函数HAL_UART_Transmit发送,而是直接操作寄存器发送。 检测串口当前状态 STM32L431的USART串口外设有一个ISR寄存器,全名Interrupt and status register, 用来指示当前串口的状态,如图: ...