打印
[STM32H7]

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

[复制链接]
613|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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串口发送一字节的时序图如下所示:



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


下面在软件中进行配置:



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

  /* USER CODE BEGIN UART4_Init 0 */

  /* USER CODE END UART4_Init 0 */

  /* USER CODE BEGIN UART4_Init 1 */

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

  /* USER CODE END UART4_Init 2 */

}

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

演示:


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

#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(&huart4, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
  return ch;
}
展示:

使用特权

评论回复
沙发
回复就哭哭| | 2024-9-30 23:17 | 只看该作者
使用 8 位数据位是最常见的配置,因为它可以表示 256 个不同的字符。

使用特权

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

本版积分规则

6

主题

21

帖子

0

粉丝