文章目录[隐藏]
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初始化:
只能用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显示:
版权声明:本文为CSDN博主「中北后浪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_46931312/article/details/122655641
暂无评论