STM32F103C8T6-串口接收数据取反

STM32F103C8T6-串口接收数据取反

一、题目

串口(使用USART2,TX为PA2,RX为PA3),发送0x55显示在上位机串口助手上,将接收的上位机数据取反后再发送到串口助手上。(波特率9600)

二、一些知识

1. 同步通信与异步通信

  • 同步通信:在同步通信中,数据的发送和接收双方需要在相同的时钟频率下工作。通常,一个设备(一般称为主设备)会产生一个连续的时钟脉冲,这个脉冲信号会通过专用的线路传送给接收设备。接收设备利用这个外部时钟信号来判断每一个数据位的采样时刻,从而实现精确的数据同步和采样。例如,SPI总线中就有一条专门的时钟线(SCLK),它就是用来同步数据传输的。
  • 异步通信:在异步通信中,双方没有共同的外部时钟信号,发送方会在数据帧前加上起始位,接收方则依赖预设的波特率在接收到起始位后以这个波特率自我生成内部时钟来采样后续的数据位,直到遇到停止位为止。由于没有独立的外部时钟信号,所以数据传输中会有一定的时序偏差容忍范围。

本题属于异步通信。使用外部晶振(HSE)作为时钟源,频率误差非常低。

  • 0x 开头的数据一般是十六进制数据。
  • uint8_t 是 无符号 8 位整数,它存储的是 0 到 255 之间的数值。

2. 对数据取反

  • 格式符 %x 可以自动识别输入是否带有 0x 前缀。
  • 运算符 ~ 是按位取反操作符。

三、CubeMX 配置

打开中断
在这里插入图片描述

打开SWD 调试(?)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、代码

/* USER CODE BEGIN PV */
uint8_t tx_data;	uint8_t rx_data;
/* USER CODE END PV */
/* USER CODE BEGIN PFP */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ // 结束接收的回调函数
		tx_data = ~rx_data;
		HAL_UART_Transmit_IT(&huart2, &tx_data, 1);
		HAL_UART_Receive_IT(&huart2, &rx_data, 1); // 重新启动中断接收
}	
/* USER CODE END PFP */
  /* USER CODE BEGIN 2 */
	HAL_UART_Receive_IT(&huart2, &rx_data, 1); // 启动中断接收
  /* USER CODE END 2 */

五、其他一些问题

  1. 2.15 没有输出,换了一块系统板有输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值