本文最后更新于337 天前,其中的信息可能已经过时,如有错误请发送邮件到273925452@qq.com
单个串口重定向
#include "stdio.h"
//-----printf重定向-----
int fputc(int ch,FILE *f)
{
HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xFFFF);
while(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC)!=SET);//等待发送完成
return ch;
}
printf("Mpu6050 Project Start\r\n");
printf(" %s\r\n",p);
一定要勾选MicroLib
多个串口重定向
#include "stdio.h"
#include "stdarg.h"
#include "string.h "
void print(UART_HandleTypeDef* huart, const char* buf, ...)
{
const char *p = buf;
char str[255] = {0};
va_list v;
va_start(v, buf);
vsprintf(str, buf, v); //使用可变参数的字符串打印。类似sprintf
HAL_UART_Transmit(huart, str, strlen(str), 0xff);
va_end(v);
}
串口中断
uint8_t Usart1_RX_Buf; //串口接收数据缓存buf
uint8_t Usart2_RX_Buf;
uint8_t Usart3_RX_Buf;
HAL_UART_Receive_IT(&huart1,&Usart1_RX_Buf,1);
HAL_UART_Receive_IT(&huart2,&Usart2_RX_Buf,1);
HAL_UART_Receive_IT(&huart3,&Usart3_RX_Buf,1);
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
HAL_UART_Transmit(&huart1,&Uart1RX_Data,1,0xFFFF);
HAL_UART_Receive_IT(&huart1,&Uart1RX_Data,1);
}
if(huart->Instance == USART2)
{
HAL_UART_Transmit(&huart2,&Uart2RX_Data,1,0xFFFF);
HAL_UART_Receive_IT(&huart2,&Uart2RX_Data,1);
}
if(huart->Instance == USART3)
{
HAL_UART_Transmit(&huart3,&Uart3RX_Data,1,0xFFFF);
HAL_UART_Receive_IT(&huart3,&Uart3RX_Data,1);
}
}