打印
[STM32L5]

【STM32L562E-DK测评】-3-UART printf功能增加

[复制链接]
189|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
上一篇测评的是EXTI外部中断,本次来一步步增加UART打印功能。从DK板子的用户手册得知,PA9与PA10用于VCP的收发。


查看原理图:




查看数据手册得知:


配置USART1外设的PIN即Tx与Rx:


点击保存,CubeIDE内置的CubeMX会自动生成代码:
static void MX_USART1_UART_Init(void)
{

  /* USER CODE BEGIN USART1_Init 0 */

  /* USER CODE END USART1_Init 0 */

  /* USER CODE BEGIN USART1_Init 1 */

  /* USER CODE END USART1_Init 1 */
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART1_Init 2 */

  /* USER CODE END USART1_Init 2 */

}

但是编译会报错,后来发现是虽然生成了代码,但是新增加的UART模块的驱动并没有自动拷贝过来,需要手动拖拽到CubeIDE的工程树里面。


现在UART已经编译没有错误了,下面增加PRINTF打印功能:
首先包含头文件:
#include <stdio.h>


其次在UART句柄声明后,添加如下代码:
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
  return ch;
}
/* USER CODE END 0 */
编译,烧录都正常
Opening and parsing file: ST-LINK_GDB_server_a12616.srec


Memory Programming ...
  File          : ST-LINK_GDB_server_a12616.srec
  Size          : 19.38 KB
  Address       : 0x08000000


Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 9]
Download in Progress:


File download complete
Time elapsed during download operation: 00:00:00.574



Verifying ...




Download verified successfully


Shutting down...
Exit.


实物按键测试:


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

108

帖子

1

粉丝