stm32cubeMX配置串口

第一步 使用stm32cubeMX配置串口

stm32cubeMX配置串口
stm32cubeMX配置串口
可以在NVIC里面设置串口的优先级,避免bug的出现。

第二步 生成代码并修改

串口打印重定向

在usart.c里面添加

/**
  * @brief  串口重定向
  */
#include <stdio.h>
int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
 
  return ch;
}

在使用的地方要引入<stdio.h>
stm32cubeMX配置串口
stm32cubeMX配置串口

设置接收中断

设置接收缓存变量
stm32cubeMX配置串口
在usart.h中声明
stm32cubeMX配置串口
写回调函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
	
	//中断处理程序
  if(huart->Instance == USART2){
		HAL_UART_Transmit(&huart2, (uint8_t *)&U2RxBuffer, 1, 0xFFFF);
	}
	
	HAL_UART_Receive_IT(&huart2, (uint8_t *)&U2RxBuffer, 1);
}

stm32cubeMX配置串口

其中根据huart->Instance == USART2判断中断源,注意每一次接收完后要开启下一次中断接收。

在main.c里面开启第一次接收中断
stm32cubeMX配置串口

其他

一般来说这样就够了,如果需要设置发送中断,接收重定向等等东西,以及多字节中断等,可以参考下面博客自行设置。
https://www.waveshare.net/study/article-644-1.html

bug

本人在使用stm32h743zi的开发板时,配置串口重定向后无法输出,不知道出了什么问题,那么这个时候该怎么办呢?我们可以使用sprintf函数来解决这一问题:

	char cha[20] = {0};
	sprintf(cha, "hello %.2f\n", 0.123);
	HAL_UART_Transmit(&huart1, (uint8_t *)&cha, 11, 0xFFFF);

stm32cubeMX配置串口
当然你也可以自己重写printf,不过我看了一下有些麻烦,printf的返回值是transform的字符数,那就要计算字符长度。可以参考下面这个博客关于不定参数的写法:https://www.cnblogs.com/linhaostudy/p/6695422.html

上一篇:基于HTML5和CSS3构建3D模型


下一篇:简易可移植的多任务轮询