STM32CubeMx配置串口使用printf函数打印数据(HAL库开发)

兄弟们,避坑啊,避坑,调了一天的程序啊,使用printf打印函数,必须勾选一个东西啊。

Keil里面必须勾选这个啊,要不然串口助手压根没有现象。

目录

STM32CubeMx配置过程

 程序:

STM32CubeMx配置过程

 

 

 

 

 模式:
Asynchronous : 异步, 整个过程,不会阻碍发送者的工作。
Synchronous : 同步, 同步信息一旦发送,发送者必须等到应答,才能继续后续的行为。
Single Wire : 单总线, 半双工。

 

 

 

 程序:

基本常用函数:

//发送数据
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData,uint16_t Size, uint32_t Timeout);

//接收数据
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData,uint16_t Size, uint32_t Timeout);

//发送中断
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

//接收中断
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

//使用DMA发送
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

//使用DMA接收
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

//DMA暂停
HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart);

//DMA恢复
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart);

//DMA停止
HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart);

使用printf打印时:得重新配置的一下程序:

单片机输出,上位机接收(串口助手接收区数据):

int fputc(int ch, FILE *f)
{
    HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 2);//huart1需要根据你的配置修改
    return ch;    
}

上位机输出,单片机接收(串口助手发送区数据):

int fgetc(FILE *f)
{
  uint8_t ch = 0;
  HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
  return ch;
}

把这个程序任意添加在代码中,直接使用printf()函数,直接好使;

猜你喜欢

转载自blog.csdn.net/m0_58832575/article/details/124947481