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

[复制链接]
700|0
 楼主| YangTwo 发表于 2025-3-3 23:37 | 显示全部楼层 |阅读模式
上一篇测评的是EXTI外部中断,本次来一步步增加UART打印功能。从DK板子的用户手册得知,PA9与PA10用于VCP的收发。
8737767c5c53539317.png

查看原理图:
2517467c5c543b8113.png

9652667c5c54c4f292.png

查看数据手册得知:
6300267c5cc7a1f390.png

配置USART1外设的PIN即Tx与Rx:
1015967c5c4fa47292.png

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

  3.   /* USER CODE BEGIN USART1_Init 0 */

  4.   /* USER CODE END USART1_Init 0 */

  5.   /* USER CODE BEGIN USART1_Init 1 */

  6.   /* USER CODE END USART1_Init 1 */
  7.   huart1.Instance = USART1;
  8.   huart1.Init.BaudRate = 115200;
  9.   huart1.Init.WordLength = UART_WORDLENGTH_8B;
  10.   huart1.Init.StopBits = UART_STOPBITS_1;
  11.   huart1.Init.Parity = UART_PARITY_NONE;
  12.   huart1.Init.Mode = UART_MODE_TX_RX;
  13.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  14.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  15.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  16.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  17.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  18.   if (HAL_UART_Init(&huart1) != HAL_OK)
  19.   {
  20.     Error_Handler();
  21.   }
  22.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  23.   {
  24.     Error_Handler();
  25.   }
  26.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  27.   {
  28.     Error_Handler();
  29.   }
  30.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  31.   {
  32.     Error_Handler();
  33.   }
  34.   /* USER CODE BEGIN USART1_Init 2 */

  35.   /* USER CODE END USART1_Init 2 */

  36. }

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

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


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

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


  2. Memory Programming ...
  3.   File          : ST-LINK_GDB_server_a12616.srec
  4.   Size          : 19.38 KB
  5.   Address       : 0x08000000


  6. Erasing memory corresponding to segment 0:
  7. Erasing internal memory sectors [0 9]
  8. Download in Progress:


  9. File download complete
  10. Time elapsed during download operation: 00:00:00.574



  11. Verifying ...




  12. Download verified successfully


  13. Shutting down...
  14. Exit.


实物按键测试:
5383567c5cadeb2b48.png

您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

110

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部