蓝桥杯学习笔记五:usart Tx使用

usart简介:

USART(Universal Synchronous/Asynchronous Receiver/Transmitter),即通用同步/异步串行接收/发送器。

UART(Universal Asynchronous Receiver/Transmitter)是异步通信方式。

虽然STM32支持USART,但是就一般使用而言,很少使用同步模式,多是使用异步模式。

同步”就是发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

异步”就是发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。异步通信发送方式下,在每一个字符的开始和结束分别加上开始位和停止位,以便使接收端能够正确地将每一个字符接收来。

波特率就是每秒传输的字节数。

usart初始化函数:

static void MX_USART1_Init(void)
{


  husart1.Instance = USART1;//选用一个usart针脚
  husart1.Init.BaudRate = 9600;//波特率9600
  husart1.Init.WordLength = USART_WORDLENGTH_8B;//有效数据8bite
  husart1.Init.StopBits = USART_STOPBITS_1;//停止位1
  husart1.Init.Parity = USART_PARITY_NONE;//起始位无
  husart1.Init.Mode = USART_MODE_TX;//传输模式
  husart1.Init.CLKPolarity = USART_POLARITY_LOW;
  husart1.Init.CLKPhase = USART_PHASE_1EDGE;
  husart1.Init.CLKLastBit = USART_LASTBIT_DISABLE;
  husart1.Init.ClockPrescaler = USART_PRESCALER_DIV1;
  husart1.SlaveMode = USART_SLAVEMODE_DISABLE;
  if (HAL_USART_Init(&husart1) != HAL_OK)//以下都是串口失败的解决方案
  {
    Error_Handler();
  }
  if (HAL_USARTEx_SetTxFifoThreshold(&husart1, USART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_USARTEx_SetRxFifoThreshold(&husart1, USART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_USARTEx_DisableFifoMode(&husart1) != HAL_OK)
  {
    Error_Handler();
  }

}

 usart的相关库函数:

HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_USART_TransmitReceive(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData,
                                            uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size);
HAL_StatusTypeDef HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size);
HAL_StatusTypeDef HAL_USART_TransmitReceive_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData,
                                               uint16_t Size);
HAL_StatusTypeDef HAL_USART_Transmit_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size);
HAL_StatusTypeDef HAL_USART_Receive_DMA(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size);
HAL_StatusTypeDef HAL_USART_TransmitReceive_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData,
                                                uint16_t Size);
HAL_StatusTypeDef HAL_USART_DMAPause(USART_HandleTypeDef *husart);
HAL_StatusTypeDef HAL_USART_DMAResume(USART_HandleTypeDef *husart);
HAL_StatusTypeDef HAL_USART_DMAStop(USART_HandleTypeDef *husart);
/* Transfer Abort functions */
HAL_StatusTypeDef HAL_USART_Abort(USART_HandleTypeDef *husart);
HAL_StatusTypeDef HAL_USART_Abort_IT(USART_HandleTypeDef *husart);

过几天用到再说,肯定要好好学的。

用CubMx初始化:

蓝桥杯学习笔记五:usart Tx使用_第1张图片

只能用HSI(原因不详)

记得更改usart1的两个引脚,cubmx默认的不是PA9、PA10

main.c:

#include "main.h"
#include "usart.h"
#include "gpio.h"
#include "string.h"


int main(void)
{
  int counter = 0;
  char str[40];

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();
  MX_USART1_Init();

  while (1)
  {
		sprintf(str, "%04d:Hello,world.\r\n", counter);
		HAL_USART_Transmit(&husart1,(unsigned char *)str, strlen(str), 50);
		HAL_Delay(500);
		
		if(++counter == 10000){
			counter = 0;
		}
  }
}

xcom显示:

蓝桥杯学习笔记五:usart Tx使用_第2张图片

 

你可能感兴趣的:(单片机,蓝桥杯,stm32)