uint8_t ch = 0; HAL_UART_Receive(&huart1,&ch, 1, 0xffff); return ch; } //后面直接使用printf函数即可: printf("AnQi测试\r\n"); 若不想自己封装代码,只需把usart_printf.c复制到主函数即可。 3.主函数main.c 记得在主函数中引入.h文件 直接使用printf即可,和C语言中的用法相同 4.Keil设置 ...
在对printf重定向之前,一定不要有printf,否则程序马上跑飞。 在main函数之前加上如下代码对串口进行重定向,当然,串口一定要初始化之后再用printf,否则程序虽然不会飞,但是printf也不会有结果 //寄存器版本#ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int ...
HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF); return ch; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 测试一下 printf("Hello, I am %s\r\n", "iii"); // printf输出字符串 printf("Test int: i = %d\r\n", 100); // printf输出int型数据 printf("Test float: i...
printf重定向到串口就必须关闭半主机模式。半主机模式简而言之就是将电脑的键盘和显示屏作为(scanf,printf)输入输出外设。第一种方法使用微库将默认关闭半主机模式,但微库会使代码量优化减少,可能造成代码的稳定性降低,微库是面向深层嵌入式开发的(这句话可能是说微库是面向最终产品的,做实验与练习没必要用)。而这方法...
STM32 HAL库重定向: /* USER CODE BEGIN 1 */intfputc(intch, FILE* f){//函数原型 HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,10);returnch; ...
STM32的HAL库开发系列 - 串口重定向printf 重定向printf函数实现串口数据发送 重定向需要完成三步: 初始化串口 包含stdio.h头文件 在keil中勾选使用C库 (Use MicroLIB) 重写fputc函数(以串口1为例) #ifdef__GNUC__#definePUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#definePUTCHAR_PROTOTYPE int fputc...
STM32的HAL库开发系列 - 串口重定向打印函数 那既然有了printf,那么为什么还要自定义打印函数呢?因为当遇到多个串口都需要使用printf时就没有办法了,所以只能自己定义打印函数,让所有串口都能像使用printf函数一样做串口输出。 首先需要包含几个头文件: #include <string.h> ...
STM32 hal_printf重定向操作只需要在uart.c文件中添加如下代码, #include "stdio.h" extern UART_HandleTypeDef huart1; uint8_t ch; uint8_t ch_r; /*fputc*/ int fputc(int c, FILE * f) { ch=c; HAL_UART_Transmit(&a
使用STM32开发,想用printf把输出打印到串口,需要重定向printf函数。 网上一搜全都是重写fpuc的,但这只针对使用了MicroLIB的情况,如果你使用STM32CubeMX配置了CMake或者Makefile项目,这种方法是根本不可行的,重写fputc没有鸟用。 这个时候需要重写_write函数,如下: ...