[STM32H7] 【STM32H7S78-DK测评】串口通信测试

[复制链接]
 楼主| SJZhu 发表于 2024-9-30 19:08 | 显示全部楼层 |阅读模式
<
本帖最后由 SJZhu 于 2024-9-30 20:45 编辑

UART通信在使用前需要对其参数进行设置,比如波特率大小、数据位数、奇偶校验类型和停止位,一般奇偶校验不使用。


波特率(Baud):波特率表示每秒钟传送的码元符号的个数。常用的波特率有1200、2400、9600、19200、115200等。在使用时要求通信两端使用相同的波特率进行发送和接收。


数据位数(Data Bits):数据位数表示从传输开始到传输结束发送的数据的位数。默认的是8位,该参数可选择为5、6、7、8。


停止位(Stop Bits):在每个字节(8位)传输完成之后便发送停止位,标志一次数据的传输完成。停止位默认是1位,该参数可选择1、1.5、2。


传输一个完整的字节需要1位起始位、8位数据位、1位停止位,总共需要10位数据,传输10位数据就需要11个波特率时钟脉冲,第一个脉冲标记一次传输的起始位,第11个脉冲标记一次传输的停止位。


UART串口发送一字节的时序图如下所示:
2346566fa83547dca1.png


在STM32H7S78-DK开发板上,板载的ST-LINK调试器的VCP与芯片的PD0与PD1引脚相连接。
8282366fa83e692c58.png

下面在软件中进行配置:
569266fa856882d39.png


点击SAVE,生成代码。如下是UART初始化函数:static void MX_UART4_Init(void)
  1. static void MX_UART4_Init(void)
  2. {

  3.   /* USER CODE BEGIN UART4_Init 0 */

  4.   /* USER CODE END UART4_Init 0 */

  5.   /* USER CODE BEGIN UART4_Init 1 */

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

  35.   /* USER CODE END UART4_Init 2 */

  36. }

函数int main(void) -> While中添加:
  1. HAL_UART_Transmit(&huart4, "\r\nHello 21ic, Hello STM32H7S78-DK!", sizeof("\r\nHello 21ic, Hello STM32H7S78-DK!"), 0xffffffff);

演示:
uart.gif

添加printf重定向,后续直接使用printf打印,更便捷!
  1. #include "stdio.h"

  2. #ifdef __GNUC__
  3. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  4. #else
  5. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  6. #endif

  7. PUTCHAR_PROTOTYPE
  8. {
  9.   HAL_UART_Transmit(&huart4, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
  10.   return ch;
  11. }
展示:
uart2.gif
回复就哭哭 发表于 2024-9-30 23:17 | 显示全部楼层
使用 8 位数据位是最常见的配置,因为它可以表示 256 个不同的字符。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

21

帖子

0

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

6

主题

21

帖子

0

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