MCU-外设(USART/UART)

本文介绍了UART(通用异步收发器)与USART(通用同步异步收发器)的区别。通常,UART仅支持异步串行通信,而USART则同时支持同步与异步串行通信。了解这些接口的特点对于选择合适的通信方式至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UART通用异步收发器

universal asynchronous receiver and transmitter;

USART通用同步异步收发器

universal synchronous asynchronous receiver and transmitter。
一般而言,单片机中,名称为UART的接口一般只能用于异步串行通讯,而名称为USART的接口既可以用于同步串行通讯,也能用于异步串行通讯。
#include "main.h" #include "usart.h" #include "gpio.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ uint8_t Tx_str1[]="Hello world!\r\n"; uint8_t Tx_str2[]="LED1 Open!\r\n"; uint8_t Tx_str3[]="LED1 Close!\r\n"; uint8_t Rx_dat=0; void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance==USART1) { if(Rx_dat==0xa1) { HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6,GPIO_PIN_SET); HAL_UART_Transmit(&huart1,Tx_str2,sizeof(Tx_str2),10000); HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6,GPIO_PIN_RESET); HAL_UART_Receive_IT(&huart1,&Rx_dat,1); } else if(Rx_dat==0xa2) { HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6,GPIO_PIN_SET); HAL_UART_Transmit(&huart1,Tx_str3,sizeof(Tx_str3),10000); HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6,GPIO_PIN_RESET); HAL_UART_Receive_IT(&huart1,&Rx_dat,1); } } } /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ HAL_UART_Transmit(&huart1,Tx_str1,sizeof(Tx_str1),10000); // HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET); // // HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET); // // HAL_UART_Receive_IT(&huart1,&Rx_dat,1); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } 为什么以上代码可以发送数据,但是无法接收?
最新发布
07-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值