本帖最后由 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;
}
展示:
|