兄弟们,避坑啊,避坑,调了一天的程序啊,使用printf打印函数,必须勾选一个东西啊。
Keil里面必须勾选这个啊,要不然串口助手压根没有现象。
目录
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()函数,直接好使;